|
Graphics`Graphics3D`
3Dでのほとんどの標準的なプロットはPlot3D,ListPlot3D,ParametricPlot3Dで行うことができる.しかし,データを3D棒グラフや散布図のようにより特殊化した形式で表示したいこともあるだろう.また,影や投射のような特殊効果を付けたい場合もあるかもしれない.このパッケージにある関数を使うと,そのような場合にも適切なプロットを行うことができる.

3D棒グラフの作成
パッケージをロードする.
In[1]:= <<Graphics`Graphics3D`
次は2 × 3の配列から作った高さが整数値の棒グラフを作成する.
In[2]:= BarChart3D[{{1, 2, 3}, {4, 5, 6}}]

Out[2]= 
グラフはGraphics3Dオブジェクトで使える任意のオプションを用いて再描画することができる.ここでは,シミュレートした照明モデルをオフにし,軸と境界ボックスを取り除いている.
In[3]:= Show[%, Lighting->False, Boxed->False, Axes->False]

Out[3]= 

BarChart3Dのオプション
BarChart3DにはXSpacingとYSpacingというオプションがあり,これを使って座標方向の棒の間のスペースを決定することができる.これらの値は から まででなければならない.デフォルト値は である.BarChart3DはGraphics3Dオブジェクトを返す.このため,Graphics3Dオブジェクトで使えるオプションはどれでも使うことができる.BarChart3Dのデフォルトのオプション値はAxes -> True とBoxRatios -> {1, 1, 1}である.

3Dにおける点のリストのプロット
組込み関数のListPlotは座標ペアのリストを取り,これを平面における点としてプロットする.3Dで3組のリストをプロットする場合はScatterPlot3Dを使うとよい.表示される点や曲線のスタイルの指定するためにScatterPlot3DはPlotStyleオプションを取る.ListSurfacePlot3Dは点の配列を使って多面体の頂点を生成する.
次は3Dにおける点のリストである.
In[4]:= lpts = Table[{ t Cos[t], t Sin[t], t}, {t, 0, 4Pi, Pi/20}];
以下でリストの散布図を作成する.ここで,点は円錐弦巻線上にある.
In[5]:= ScatterPlot3D[lpts]

Out[5]= 
次は点を太い線でつなぐ.
In[6]:= ScatterPlot3D[lpts, PlotJoined -> True, PlotStyle -> Thickness[0.03]]

Out[6]= 
次は3Dにおける点の配列である.
In[7]:= apts = Table[{Cos[t] Cos[u], Sin[t] Cos[u], Sin[u]}, {t, 0, Pi, Pi/5}, {u, 0, Pi/2, Pi/10}];
点の配列はメッシュの多面体の頂点を生成するために用いられている.これで球面の一部を作る.
In[8]:= ListSurfacePlot3D[apts]

Out[8]= 

影付きプロット
ShadowPlot3DとListShadowPlot3Dは組込み関数のPlot3DおよびListPlot3Dと全く同じように動作する.唯一の相違点は前者で影が付けられることである.
次は - 平面上に影を付ける.
In[9]:= ShadowPlot3D[Sin[x y], {x, 0, 3}, {y, 0, 3}]

Out[9]= 
次は境界ボックスの上に影を移動したプロットである.
In[10]:= ShadowPlot3D[ Exp[-(x^2 + y^2)], {x, -2, 2}, {y, -2, 2}, ShadowPosition -> 1]

Out[10]= 

ShadowPlot3DとListShadowPlot3Dのオプション
Shadowには影を特定の方向に描くか否かを指定するXShadow,YShadow,ZShadowのオプションがある.これらのオプションのデフォルト値はTrueである.XShadowPosition,YShadowPosition,ZShadowPositionの3つのオプションは投射の影を正の座標方向に描くか,あるいは負の座標方向に描くかを決定する.これらのデフォルト値は-1である.
組込みのParametricPlot3Dを使って3Dグラフィックスオブジェクトを作成する.
In[11]:= dbell = ParametricPlot3D[ {Sin[t], Sin[2t] Sin[u], Sin[2t] Cos[u]}, {t, -Pi/2, Pi/2}, {u, 0, 2Pi}, Ticks -> None]

Out[11]= 
次は と 方向からの投射でグラフィックスオブジェクトを示している.
In[12]:= Shadow[dbell, ZShadow -> False]

Out[12]= 
次は同じオブジェクトの影 を境界ボックスの反対側の面に移したものである.
In[13]:= Shadow[dbell, ZShadow -> False, XShadowPosition -> 1]

Out[13]= 

3Dグラフィックスオブジェクトの投射
次はダンベルをその中心とベクトル{1, 1, 0}に垂直な平面に投射したものである.
In[14]:= Show[Project[dbell, {1, 1, 0}]]

Out[14]= 
次は別な平面への投射である.
In[15]:= Show[Project[dbell, {0, 1, 0}]]

Out[15]= 
投射平面の規定ベクトルを変更すると回転効果がある.
In[16]:= Show[Project[dbell, {{1, 1, 0}, {0, 0, 1}}, {0, 1, 0}]]

Out[16]= 

グラフィックスを積み重ねる
次は2Dグラフィックスオブジェクトのリストを生成する.DisplayFunction->Identityと設定するPlotとが作成したグラフィックスを描画しなくなる.
In[17]:= gtab = Table[ Plot[x^n, {x, 0, 5}, DisplayFunction -> Identity], {n, 5}]
Out[17]= 
以下は立方体に積み上げられたグラフィックスである.
In[18]:= Show[StackGraphics[gtab]]

Out[18]= 
ShadowPlot3D,ListShadowPlot3D,Shadowはすべて3Dグラフィックスオブジェクトを作成し,描画もする.しかしProjectとStackGraphicsはグラフィックスオブジェクトを作成するのみである.オブジェクトを描画したければShowを使う必要がある.

Histogram3Dを使う
Histogram3Dはカテゴリ化された2変量頻度データのプロットに使用され,各棒の面積が各カテゴリを表す2変量の区間に比例し,棒の高さが各カテゴリのデータの頻度に比例する立体の棒グラフを与える.FrequencyData -> TrueとするとHistogram3Dに与えられるデータはカテゴリ化できる生データではなくHistogramCategoriesで指定されるカテゴリの頻度データであるとみなされる.
以下で多重正規分布の擬似乱数を生成するパッケージをロードする.
In[19]:= Needs["Statistics`MultinormalDistribution`"]
次は平均ベクトルゼロ,共分散行列が 1, .9 , .9, 1 の従法線的に分布したデータセットである.
In[20]:= (binormdist = MultinormalDistribution[{0, 0}, {{1, .9}, {.9, 1}}]; binormdata = RandomArray[binormdist, 100]);
Histogram3Dは単純な数で定義された区間を選んでカテゴリを自動的に決定する.
In[21]:= Histogram3D[binormdata]

Out[21]= 
次は2変量区間で分類された項目を表すデータセットである.例えば のカットオフが で のカットオフが の場合,区間 と では4つのデータが数えられる.
In[22]:= countdata = {{1, 1, 0, 0, 0, 0, 0, 0}, {2, 16, 9, 0, 0, 0, 0, 0}, {0, 4, 10, 8, 2, 0, 0, 0}, {0, 1, 11, 13, 16, 0, 0, 0}, {0, 2, 1, 5, 16, 13, 1, 0}, {0, 0, 0, 2, 16, 8, 9, 0}, {0, 0, 0, 0, 1, 13, 15, 1}, {0, 0, 0, 0, 0, 0, 0, 3}};
オプションHistogramCategoriesは と のカットオフのリストで定義されているように,ヒストグラムのカテゴリを指定するのに用いることができる.
In[23]:= Histogram3D[countdata, FrequencyData->True, HistogramCategories -> {{-3, -2, -1, -.5, 0, .5, 1, 2, 3}, {-3, -2, -1, -.5, 0, .5, 1, 2, 3}}]

Out[23]= 

ヒストグラムの特別オプション
HistogramCategoriesオプションの可能な設定値はAutomatic,正の整数 , と 座標の個別の設定 ,  のいずれかである.整数 を指定した場合, 個の2変量区間がHistogramRangeオプションで指定される領域をカバーするように選ばれる.ApproximateIntervals -> Falseの設定ではヒストグラムは正確に 個のカテゴリを持つが,ApproximateIntervals -> Trueの場合は区間の境界を単純な項数で表すために,要求された数のカテゴリが調節されることもある.個別の座標設定 あるいは はそれぞれAutomatic,正の整数,あるいはカットオフのリストであり得る.
HistogramRangeオプションの可能な設定値は,Automaticあるいはリスト ,  である.ここで または はAutomaticか min, max に送られることがある.後者に送られた場合は,ヒストグラムに含まれるデータの座標に対応した上限と下限を指定する.
HistogramScaleオプションの可能な設定値はAutomatic,True,正の数m のいずれかである.設定がAutomaticのとき,棒の高さは面積が均一ではない場合を除いて,棒の切断面の面積によってスケールされることはない(頻度密度を生じる).HistogramScale -> Trueの設定のときは,棒の面積に関わらず頻度密度が与えられる.HistogramScale -> m の設定では,棒の体積の総和がm になるように棒の高さがスケールされる.HistogramScale -> 1と設定すると,データの確率密度関数の近似プロットが与えられる.
以下ではHistogramCategoriesが,従法線的に分布したデータセットをカテゴリ化するために用いられるカットオフを指定している.Ticks -> IntervalBoundariesの設定で区間の境界にある目盛が拾われ,HistogramScale -> 1と設定するとヒストグラムの体積が一定になるようにプロットがスケールされる.
In[24]:= Histogram3D[binormdata, HistogramCategories -> {{-3., -1.5, -.5, 0, .5, 1.5, 3.}, {-3., -1.5, -.5, 0, .5, 1.5, 3.}}, Ticks -> IntervalBoundaries, HistogramScale -> 1]

Out[24]= 
カテゴリを指定せずに頻度データの2変量のヒストグラムをプロットするとカテゴリは一定の面積を持つようになる.すなわちHistogramCategories ->  0, 1, ... , 0, 1, ...  となる.
In[25]:= Histogram3D[countdata, FrequencyData->True]

Out[25]= 
Histogram3D関数は,特別なヒストグラムオプション,SolidBarEdges,SolidBarEdgeStyle,SolidBarStyle等の特別な立体棒グラフオプション,それにTicksのような標準的なグラフィックスオプションを取る.Histogram3Dは特別なTicks設定のIntervalBoundariesとIntervalCentersを取る.

Histogram3DのTicksオプションの設定
|