グラフィックスオブジェクトの構造

「グラフィックスとサウンド」において,PlotListPlot等のプロット関数の使い方を説明した.ここでは,プロット関数で生成したグラフィックスが Mathematica 内部でどのような形式で保管されているか,また,より複雑なグラフィックスを作成するには Mathematica をどのようなプログラムしたらよいかを説明していく.

基本的にグラフィックスはプリミティブ(基本単位)の集合体である.これはすべてのグラフィックスで共通である.プリミティブとはグラフィックスの各基本要素に当たるPointLinePolygon等のオブジェクトのことである.また,RGBColorThicknessの指示子もプリミティブに当たる.

データ点を生成した後,プロットする.
In[1]:=
Click for copyable input
Out[1]=
グラフィックスをInputForm(入力形)に変換し,グラフィックスが内部でどう表現されているか見てみる.グラフィックスプリミティブであるPointの座標で各データ点が表されており,また,グラフィックス設定値も与えられている.
In[2]:=
Click for copyable input
Out[2]//InputForm=

グラフィックスとして自立する要素は,グラフィックスオブジェクトとして扱われる.グラフィックスオブジェクトには各型に応じていくつか種類があり,そのひとつひとつには型を指定する頭部が付いている.

Graphics[list]通常の2Dグラフィックス
Graphics3D[list]通常の3Dグラフィックス

グラフィックスオブジェクトの種類

「グラフィックスとサウンドオブジェクトの構造」で説明したPlotListPlot等のプロット関数はすべてグラフィックスオブジェクトを組み合せることで最終的に表示するグラフィックスを構成している.

ユーザ定義のグラフィックスオブジェクトを組み合せ,上記以外のグラフィカルイメージが作成できる.さらに,グラフィックスオブジェクトも式として表すので,標準的な Mathematica の関数を使いグラフィックスをいろいろ操作できる.

グラフィックスオブジェクトは,Mathematica フロントエンドにより,出力の際のグラフィックスとして自動的にフォーマットされる.グラフィックスはPrintコマンドを使った二次的出力として出力されることもある.

Graphicsオブジェクトは Mathematica で計算されるが,その出力はセミコロンを使うことで表示されない.
In[3]:=
Click for copyable input
Out[3]=
Printコマンドを使うと,二次的出力が生成できる.その場合は二次的出力であるため,Out[]ラベルは付かない.
In[4]:=
Click for copyable input
Out[4]=
Show[g,opts]新しいオプションを opts で指定して,グラフィックスオブジェクトを表示する
Show[g1,g2,...] からのオプションを使って,いくつかのグラフィックスオブジェクトを組み合せて表示する
Show[g1,g2,...,opts]新しいオプションを opts で指定していくつかのグラフィックスオブジェクトを表示する

グラフィックスオブジェクトの描画

Showは,既存のグラフィックスのオプションを変更するため,あるいは複数のグラフィックスを組み合せるために使うことができる.

以下ではShowを使い,既存のグラフィックスのBackgroundオプションを調整する.
In[5]:=
Click for copyable input
Out[5]=
これはShowで2つのグラフィックスを組み合せる. PlotRangeおよび他のオプションに使われる値は,最初のグラフィックスに設定された値に基づいている.
In[6]:=
Click for copyable input
Out[6]=
ここでは,グラフィックス全体に対して新しいオプションが指定されている.
In[7]:=
Click for copyable input
Out[7]=
グラフィックス指示子例:RGBColorThickness
グラフィックスオプション例:PlotRangeTicksAspectRatioViewPoint

グラフィックス変更のための局所的手法と大域的手法

グラフィックスプリミティブをもとにしたグラフィックスの作成では,普通,各種の修正操作を繰り返すことで最終的な形を得る.Mathematica では修正作業のため2つの方法が用意されている.そのひとつは,グラフィックスにグラフィックス指示子を与える方法である.グラフィックス指示子をグラフィックスプリミティブのリストに加えると,指示内容が続くグラフィックス要素に適用される.すると,グラフィックス単位で描画要素をどう表示するか指定できるようになる.グラフィックス指示子の一例にRGBColorがある.

Polygonグラフィックスプリミティブを含む2Dのグラフィックスオブジェクトを生成する.
In[8]:=
Click for copyable input
Out[8]=
InputFormは完全なグラフィックスオブジェクトを表示する.
In[9]:=
Click for copyable input
Out[9]//InputForm=
上で作成されたグラフィックスプリミティブを使い,グラフィックス指示子RGBColorEdgeFormを追加する.
In[10]:=
Click for copyable input
Out[10]=

グラフィックス指示子を与えることで,特定の描画要素をどう表示したらよいかを指定することができる.しかし,多くの場合,グラフィックス全体の構図等の設定は大域的に変更したい.設定を変更するにはグラフィックスオプションを使う.

グラフィックスオプションFrameを加えることで,グラフィックス全体の見栄えを修正することができる.
In[11]:=
Click for copyable input
Out[11]=
InputFormを使い調べてみると,オプションが結果のGraphicsオブジェクトに含まれていることが分かる.
In[12]:=
Click for copyable input
Out[12]//InputForm=

Showではグラフィックスオプションを指定できる.オプションの設定値をいろいろ変えながら同じプロットデータをもとにグラフィックスをいろいろと再表示でき,違った描画条件下でグラフィックスがどう映るかをすばやく見ていけるので便利である.

注意点として,Showの返すグラフィックスオブジェクトは表示したままのものである.つまり,Showで設定条件を変更した場合,変更した条件もShowの返すオブジェクトに入る.このため,再度同じオブジェクトにShowを使うと,設定条件を変更しない限り,前と同じ仕様で表示されることになる.新たに設定値を指定すれば,もとの値は上書きされる.

Options[g]グラフィックスオブジェクトに指定されている全オプションの値をリストアップする
Options[g,opt]指定されている特定オプションの値を出力する

グラフィックスオブジェクトに付随したグラフィックスオプションの参照

グラフィックスオプションの中には,グラフィックスを生成する関数を可視化するオプションとして使えるものもある.右辺にAutomaticを取ることのできるオプションは,可視化関数により特定の値へと分解されることがある.

プロットしてみる.
In[13]:=
Click for copyable input
Out[13]=
Mathematica は結果のグラフィックスのPlotRangeに対する明示的な値を計算するために,内部アルゴリズムを使う.
In[14]:=
Click for copyable input
Out[14]=
FullGraphics[g]グラフィックスオプションによって仕様を指定したオブジェクトをプリミティブとしてリスト形式で出力する

グラフィックス構成の詳細参照

グラフィックスオプションを指定すると,Mathematica は指定された通りに,軸等のオブジェクトを自動的に描画する.Axesがよい例である.オブジェクトはグラフィックスプリミティブの特定のリストによってではなく,オプション値によってのみ表される.これらのオブジェクトをグラフィックスプリミティブのリストとして表すことは,ときに有用なものである.関数FullGraphicsはオプションを使わずに,特定のプロットを生成するのに必要なグラフィックスプリミティブのリストを生成する.

数値データをプロットする.
In[15]:=
Click for copyable input
Out[15]=
FullGraphicsを使い座標軸等のプリミティブも含むグラフィックスオブジェクトを生成する.
In[16]:=
Click for copyable input
Out[16]//Short=
New to Mathematica? Find your learning path »
Have a question? Ask support »