43.49 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 in scan>,<steps 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 は格子点をより細かな網目に補間し、色四角形も 近似的に補間します。データ描画に対しては、これは曲面の色の変化を滑らか にし、曲面の色の尖りを補正します。関数描画に対しては、この補間は細かさ の代わりにメモリを消費してしまう、といったことくらいの意味しかありませ んから、関数描画の場合は普通 samplesisosamples を使うべきでし ょう。

色づけの設定はカラーボックスの描画と同様に 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 も参考になるでしょう。


竹野茂治@新潟工科大学
2009年9月7日