2Dグラフィックスの座標系

グラフィックスオブジェクトを構成する各描画要素にはプロット空間における実座標が与えられる.オブジェクトを描画するため,Wolfram言語は実座標を表示用座標に変換する.表示用座標を使うことではじめて各要素を表示面内の適切な位置に配置することができるようになる.

PlotRange->{{xmin,xmax},{ymin,ymax}}プロットするデータ,関数値の範囲を示す対角座標を実座標で指定する

実座標と表示座標によるプロット領域の指定

グラフィックス処理でまず行われることは,もとの および 座標のどの範囲をプロット領域として実際に表示するかの決定である.一旦領域が決まったなら,その外にはみ出たグラフィックス要素は「クリップ」され,表示には現れない.

オプションPlotRangeを使い実座標における描画範囲を指定することができる.「プロット仕様の変更」にあるように,デフォルト値はPlotRange->Automaticである.つまり,重要と思われるプロット部分が選択され,その部分だけが描画領域に入れられる.不必要と判断された部分は表示されない.設定をPlotRange->Allとすれば,全領域が描画の対象になる.このオプションで特定範囲を指定することも可能である.

多角形オブジェクトを作っておく.各コーナーがおおよそ単位円()内に入るように指定している.
In[1]:=
Click for copyable input
描画すると全表示領域を埋め尽くしてしまうほど大きい.
In[2]:=
Click for copyable input
Out[2]=
明示的にPlotRangeを指定すると,グラフィックスの断面をズームインすることができる.
In[3]:=
Click for copyable input
Out[3]=
AspectRatio->r表示領域の高さ対幅の割合を r とする
AspectRatio->Automatic実座標系での範囲から縦横比を自動計算する

表示領域の縦横比設定

これまでは,実座標上の点がどのようにして最終表示面の点に移されるか,またどう指定するかを説明してきた.次に,実際のグラフが表示上どう映るか,また,どう映すかを見ていく.

使用するモニタやオペレーティングシステムによっても違うが,モニタ表示面で見やすく表示されるには縦横比が適切な値になっていることが必要不可欠である.縦横比を指定するにはオプションAspectRatioを使う.

AspectRatioを指定したからといって,スケールされた座標と表示座標の意味合いが変わるというものではない.後者は0から1の値を取り,1が全表示面の幅を示すことに変わりない.AspectRatioで変わるものは表示領域の縦横の形である.

2Dグラフィックスでは,AspectRatioはデフォルトでAutomaticに設定されている.これは縦横比を固定値に設定する代りに,もとの座標系から決定するものである.もとの座標系の 方向への1単位は,最終的な表示において 方向の1単位と同じ距離に対応する.このように,もとの座標系で定義したオブジェクトは,「自然な形」で表示される.

以下は正六角形に対応するグラフィックスオブジェクトである.デフォルト値のAspectRatio->Automaticでは,最終的な表示領域の縦横比はもとの座標系から求められ,六角形は「自然な形」で表示される.
In[4]:=
Click for copyable input
Out[4]=
表示する際に,縦横比を3にし,六角形の高さが幅の3倍になるようにする.
In[5]:=
Click for copyable input
Out[5]=

たまに,グラフィカル要素の表示座標を直接指定することが便利な場合がある.これには ではなくスケールされた座標Scaled[{sx,sy}]を使う.スケールされた座標は および の0から1までで,原点がプロット範囲の左下隅となるよう定義される.

{x,y}もとの座標
Scaled[{sx,sy}]プロット範囲にスケールされた座標
ImageScaled[{sx,sy}]表示範囲にスケールされた座標

2Dグラフィックスの座標系

枠にラベルが付いているため,表示範囲がプロット範囲よりかなり大い.
In[6]:=
Click for copyable input
Out[6]=
Scaled座標を使うと,長方形は指定されたプロット範囲の中心に位置する原点に置かれる.
In[7]:=
Click for copyable input
Out[7]=
ImageScaled座標を使うと,長方形はグラフィックスの中心に置かれる.グラフィックスの中心はプロット範囲の中心とは一致しない.
In[8]:=
Click for copyable input
Out[8]=

Scaled[{sx,sy}]ImageScaled[{sx,sy}]を使う場合,完全にもとの座標か完全にスケールされる座標かで位置を指定する.しかし,この両方の座標系を組み合せる必要がある場合もある.例えば,長さがプロットの一定分量となっているような線をある点に描画する場合,線の基本的な位置を指定するためにはもとの座標を,線の長さを指定するためにはスケールされる座標を使わなければならない.

Scaled[{dsx,dsy},{x,y}]を使うと,もとの座標とスケールされた座標の両方を使った位置が指定できる.この場合 はもとの座標の位置を与え, はスケールされる座標の位置からのオフセットを与える.

Circle[{x,y},Scaled[sx]]半径がプロット範囲の幅にスケールされる円
Disk[{x,y},Scaled[sx]]半径がプロット範囲の幅にスケールされる円板
FontSize->Scaled[sx]プロット範囲の幅にスケールされるフォントサイズの指定

Scaledが1つの引数で使える場合

次では,円の半径とフォントの大きさの両方がScaledの値で指定されている.
In[9]:=
Click for copyable input
Out[9]=
Scaled[{sdx,sdy},{x,y}]もとの座標からスケールされたオフセット
ImageScaled[{sdx,sdy},{x,y}]もとの座標からスケールされた画像のオフセット
Offset[{adx,ady},{x,y}]もとの座標からの絶対オフセット
Offset[{adx,ady},Scaled[{sx,sy}]]スケールされた座標からの絶対オフセット
Offset[{adx,ady},ImageScaled[{sx,sy}]]画像スケールされた座標からの絶対オフセット

オフセットとして指定される位置

ここで描かれる線分はすべて6プリンタポイントの絶対長を持つ.
In[10]:=
Click for copyable input
Out[10]=
Circleの中で1つだけ引数を持つOffsetを使い,一定の絶対半径を持つ円を描画することもできる.
In[11]:=
Click for copyable input
Out[11]=

ほとんどの種類のグラフィックスでは,プロットの座標あるいは全体的な大きさを変更したときに,異なるオブジェクトの相対的な位置が自動的に適応されるようになっていた方がよいだろう.しかし,1つのオブジェクトから別のオブジェクトまでのオフセットが固定されたままの状態に保たれていた方がよい場合もあるかもしれない.例えば,異なるプロットが異なる形式を持つとしても,ある特性に一貫性を持たせたプロットを集めている場合等である.

Offset[{adx,ady},position] を使うと,もとの座標もしくはスケールされた座標で指定される位置から絶対オフセットを与えることにより,オブジェクトの位置を指定することができる.オフセットの単位はプリンタポイント(インチ)である.

プロットにテキストを入れる場合,使用されるフォントの大きさもプリンタポイントで指定する.例えば,10ポイントのフォントは,その基本的な高さが10プリンタポイントの文字である.プロット内部でテキストを動かしたり,テキストサイズにマッチしたシンボルやアイコンを作成したりするときはOffsetを使う.

スケールされた座標を使うと,グラフィカル要素のサイズを表示領域の大きさの割合として指定することができる.しかし,特定のグラフィカル要素を描画する実際の物理的サイズを指定することはできない.もちろんこのサイズは最終的には使用するグラフィックス出力デバイスの詳細に依存するため,Wolfram言語内部で確実に決定することはできない.それでも「グラフィックス指示子とグラフィックスオプション」で説明してあるAbsoluteThickness等のグラフィックス指示子を使うと,特定のグラフィカル要素に対して使用する「絶対サイズ」を指定することができる.この方法で要求するサイズは,すべてではないがほとんどの出力デバイスで有効である(例えば,画像を光学的に投影する場合,その中のグラフィカル要素を同じ絶対サイズに維持することは可能でもなければ望ましくもない).