75.52 Pm3d

pm3d は splot の一つのスタイルで、パレットに割り付けられた 3 次元、 4 次元データを、カラー/灰色の色地図/曲面として描画します。これは pm3d アルゴリズムを用いていて、これはデータが格子状であっても、データ走査毎 に点の数が違っているような非格子状のデータであっても、前処理することな く描画できます。

カラー曲面の描画は、palette で指定した色割当による多角形の塗りつぶし をサポートしている出力形式で行えます。現在サポートしている出力形式には 以下のものが含まれます。


 画像出力ドライバ:
   OS/2 Presentation Manager
   X11
   Linux VGA (vgagl)
   GGI
   Windows
   AquaTerm (Mac OS X)
   wxWidgets (wxt)
 画像ファイル出力ドライバ:
   PostScript
   pslatex, pstex, epslatex
   gif, png, jpeg
   (x)fig
   tgif
   cgm
   pdf
   svg
   emf

まず、地図/曲面がどのように描かれるのかについて記述します。入力データ は、関数を評価して得られるかまたは splot data file から得られます。 曲面は、走査 (孤立線) の繰り返しで構成されます。pm3d アルゴリズムでは、 最初の走査で検出された隣り合う 2 点と、次の走査で検出された他の 2 点の 間の領域が、これら 4 点の z の値 (または追加された 'color' 用の列の値、 以下参照: using (p. [*])) に従って灰色で (または カラーで) 塗られます。デフォ ルトでは 4 つの角の値の平均値が使われますが、それはオプション corners2color で変更できます。それなりの曲面を描くためには、隣り合う 2 点の走査が交差してはいけなくて、近接点走査毎の点の数が違いすぎてはい けません。もちろん、最も良いのは走査の点の数が同じことです。他には何も 必要ではありません (例えばデータは格子状である必要もない)。他にもこの pm3d アルゴリズムは、入力された (計測された、あるいは計算された) 領域 の外には何も描かない、という長所があります。

曲面の色づけは、以下のような入力データに関して行われます:

1. 関数、または 1 つか 3 つのデータ列からなるデータの splot: 上に述べ た四辺形の 4 つの角の z 座標の平均値 (または corners2color) から、灰 色の範囲 [0:1] を与える zrange または cbrange の範囲 [min_color_z,max_color_z] への対応により、灰色/カラーの値が得られます。 この値は、直接灰色の色地図用の灰色の値として使うことができます。正規化 された灰色の値をカラーに対応させることもできます。完全な説明は、以下参照: set palette (p. [*])

2. 2 つか 4 つのデータ列からなるデータの splot: 灰色/カラーの値は、z の値の代わりに最後の列の座標を使って得られますので、色と z 座標が独立 なものになります。これは 4 次元データの描画に使うことができます。

他の注意:

1. 物理学者の間では、gnuplot の文書やソースに現われる 'iso_curve' (孤 立線) という言葉よりも、上で言及した '走査 (scan)' という言葉の方が使 われています。1 度の走査と他の走査の記録により色地図を評価する、という のはそういう意味です。

2. 'gray' や 'color' の値 (scale) は、滑らかに変化するカラーパレットへ の、連続な変数の線形写像です。その写像の様子は描画グラフの隣に長方形で 表示されます。この文書ではそれを "カラーボックス (colorbox)" と呼び、 その変数をカラーボックス軸の変数と呼びます。以下参照: set colorbox (p. [*]),set cbrange (p. [*])

3. pm3d の色づけを 3 次元曲面ではなく 2 次元描画に使うには、 set view mapset pm3d map を使用してください。

書式 (オプションは任意の順で与えることができます):

     set pm3d
     set pm3d {
                { at <bst combination> }
                { interpolate <steps/points in scan, between scans> }
                { scansautomatic | scansforward | scansbackward | depthorder }
                { flush { begin | center | end } }
                { ftriangles | noftriangles }
                { clip1in | clip4in }
                { corners2color { mean|geomean|median|min|max|c1|c2|c3|c4 } }
                { hidden3d <linestyle> | nohidden3d }
                { implicit | explicit }
                { map }
              }
     show pm3d
     unset pm3d

データまたは関数の描画スタイル (style) がグローバルに、または with オプションで pm3d に設定されている場合、色付きの曲面が描画されます。 オプション implicit が有効になっている場合、pm3d の曲面は線分による 曲面の網目による表示も一緒に行なわれます。詳しいことは、この節の下の方 をご覧ください。

色の曲面は底面か天井 (この場合は灰色/カラーの平面地図) か曲面上の点の z 座標 (灰色/カラー曲面) に描くことができます。その選択は、オプション at に、b, t, s の 6 つまでの組合せの文字列をつけて指定すること で行えます。例えば at b は底面のみに描画しますし、at st は最初に曲 面に描いて次に天井面に色地図を描きますし、at bstbst は ... 真面目な 話、こんなものは使いません。

塗られた四辺形は、次から次へと描画されて行きます。曲面を描画する場合 (at s)、後の四辺形が前のものに重なり (上書きし) ます (gnuplot は塗ら れた多角形の網の重なりの相互作用を計算するような仮想現実ツールではあり ません)。 最初に走査されるデータを最初に描くか最後に描くかを切替えるス イッチオプション scansforwardscansbackward を試してみてくださ い。デフォルトは scansautomatic で、これは gnuplot 自身に走査の順を 推測させます。一方で、オプション depthorder は四辺形の順序を完全に再 構成します。塗りつぶしは深さ順に並び変えされた後で行われ、これによりか なり複雑な曲面でも視覚的なものにすることができます。詳細は、以下参照:pm3d depthorder (p. [*])

2 回の連続する走査で点の数が同じでなかった場合、四辺形の点の取り始めを、 両方の走査の最初から (flush begin) にするか、最後から (flush end) にするか、真中から (flush center) にするかを決定しなければいけません。 flush (center| end)scansautomatic とは両立せず、よって flush center または flush end を指定して scansautomatic が設定さ れた場合、それは無言で scansforward に変更されます。

2 回の連続する走査で点の数が同じでなかった場合、個々の走査で点が足りな い場合に、走査の最後に色三角形を描くかどうかをオプション ftriangles は指示します。これは滑らかな色地図の境界を描くのに使われます。

四辺形の x,y 座標に関するクリッピングは 2 つの方法で行われます。 clip1in: 各四辺形の全ての 4 点が定義されていなければならず、少なくと もそのうちの 1 点が x, y の範囲におさまっていなければなりません。 clip4in: 各四辺形の全ての 4 点が x, y の範囲におさまっていなければな りません。

描画される各 pm3d 四辺形には一つの灰色/カラー値が対応します (4 頂点間 で滑らかなカラー変化は起こりません)。その値は、corners2color < option> に従って周囲の角の z 座標から計算されます。< option> は 'mean' (デフォ ルト)、'geomean', 'median' で、曲面のカラーの平滑化に幾つかの種類を与 え、'min','max' はそれぞれ最小値、最大値を選択します。これらは鋭敏な、 あるいは急激なピーク値を持つようなピクセルイメージや色地図を作るときに は必要ありません。そのような場合には、むしろオプション 'c1', 'c2', 'c3', 'c4' を使って、四辺形の色の割当にただ一つの角の z 座標を使うよう にすればいいでしょう。どの角が 'c1' に対応するのかを知るためには何回か 実験してみる必要があるでしょう。その向きは描画の方向に依存しています。 pm3d アルゴリズムは、カラー曲面を入力データ点の範囲の外には描かないの で、オプション 'c< j> ' は、格子の 2 つのへりに沿ったピクセルが、どの四 辺形の色にも寄与しない、という結果をもたらします。例えば、pm3d アルゴ リズムを 4x4 のデータ点の格子に適用するスクリプト demo/pm3d.dem (是 非見てください) では、(4-1)x(4-1)=9 色しかない長方形が生成されます。

与えられた節点に対して、その周りの 4 つの節点の平均化された (x,y) 座標 から角を得て四辺形を作って、その四辺形を節点の色で塗る、といったような 他の描画アルゴリズムが将来実装されるかもしれません。 これは、イメージの描画 (2 次元の格子) に対しては imagergbimage スタイルによって既に行なわれています。

z の値の範囲と曲面の色の値の範囲は、z と cb に関する set log 同様、 set zrangeset cbrange によって独立に調整し得ることに注意して ください。色地図は cb 軸のみで調節されます。以下も参照: set view map (p. [*]),set colorbox (p. [*])

オプション hidden3d は、線種 (linestyle) を引数に取りますが、それは set style line ... で生成しなければなりません (その線種は pm3d の設 定時には存在している必要はありませんが、描画時には必要です)。これが設 定されると、線は隠線処理を考慮に入れながら、指定された線種で描画されま す。これは、set hidden3d コマンドを使うよりもはるかに効果的で、これ は実際に隠線処理を計算することはしませんが、塗りつぶされた多角形を正し い順序で描いて行きます。よって、pm3d を使う場合のお勧めの選択は以下の通りです:

     set pm3d at s hidden3d 100
     set style line 100 lt 5 lw 0.5
     unset hidden3d
     unset surf
     splot x*x+y*y

従来、このコマンドに {transparent| solid} のオプションが用意されていま したが、現在はそれらはそれぞれ set grid {front| layerdefault} で行な うことができます。

set pm3d mapset pm3d at b; set view map; set style data pm3d; set style func pm3d; を省略したものです。これは、set view map がな かったころの旧バージョンへの互換性のためのものです。入力データ点をフィ ルタするための zrange、および色の範囲の変更用の cbrange を注意して 適切に使用してください。set (no)surface も 効果 (副作用 ?) があるよ うです。

オプション interpolate m,n は、格子点をより細かな網目に補間し、色四 角形も近似的に補間します。データ描画に対しては、これは曲面の色の変化を 滑らかにし、曲面の色の尖りを補正します。関数描画に対しては、この補間は 細かさの代わりにメモリを消費してしまう、といったことくらいの意味しかあ りませんから、関数描画の場合は普通 samplesisosamples を使うべ きでしょう。正の m, n に対しては、各四辺形、または三角形は、それぞれの 方向に m 回、n 回補間されます。負の m, n では補間の頻度は、少なくとも | m| , | n| 点が描画されるように選択されます。これは特別な格子関数と見な すことができます。0 の場合、すなわち interpolation 0,0 は、自動的に 最適な補間曲面点数を選択します。

色づけの設定はカラーボックスの描画と同様に set palette で決定されま す。一つの描画では一つのパレットのみが存在し得ます。いくつもの曲面を 異なるパレットで描画するには、originsize を固定して mutiplot を使うことで行えます。出力ドライバが利用できる色を使い尽くしてしまう場 合には set palette maxcolors を使うことを忘れずに。

gnuplot の起動時はモードは explicit になっています。歴史的な、よって 互換性のために、コマンド set pm3d; (すなわちオプションを指定しない場 合) と set pm3d at X ... (すなわち at が最初のオプションの場合) は モードを implicit に設定します。set pm3d; はさらにその他のオプショ ンをデフォルトの値に設定します。

オプション implicit が ON の場合、全ての曲面の描画が追加的にデフォル トの型で行われます。例えば

     splot 'fred.dat' with lines, 'lola.dat' with lines

は、両方の描画 (網目の曲面) を追加的に pm3d 曲面に描きます。set pm3d; の後はこちらの方が慣れているでしょう。

オプション explicit が ON (または implicit が OFF) の場合、属性 with pm3d が指定された描画のみが pm3d 曲面として描画されます。例えば

     splot 'fred.dat' with lines, 'lola.dat' with pm3d

は、'freq.dat' は線で (線のみで) 描画され、'lola.dat' は pm3d 曲面とし て描かれます。

デフォルトのデータ/関数の描画スタイルを pm3d にしたい場合は、例えば

     set style data pm3d

とします。この場合、オプション implicitexplicit は効力を持ちま せん。

いくつかの描画においては、それらはコマンドラインで与えられた順に描画さ れることに注意してください。これは特に、以前の描画を上書きしてそれで一部を隠してしまう可能性がある、曲面の塗りつぶしに関して関心を持たれることです。

splot コマンドライン上で with pm3d が指定されている場合はオプショ ン at も使えます。以下の描画は、異なった高さで 3 つのカラー曲面を描きます:

     set border 4095
     set pm3d at s
     splot 10*x with pm3d at b, x*x-y*y, x*x+y*y with pm3d at t

以下も参照: set palette (p. [*]), set cbrange (p. [*]), set colorbox (p. [*]), x11 pm3d (p. [*])。 そしてもちろんデモファイル demo/pm3d.dem も参考になるでしょう。


竹野茂治@新潟工科大学
2010年3月14日