カラー曲面の描画は、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 参照) に従って灰色で (または カラーで) 塗られます。デフォルト では 4 つの角の値の平均値が使われますが、それはオプション corners2color で変更できます。それなりの曲面を描くためには、隣り合う 2 点の走査が交差してはいけなくて、近接点走査毎の点の数が違いすぎてはい けません。もちろん、最も良いのは走査の点の数が同じことです。他には何も 必要ではありません (例えばデータは格子状である必要もない)。他にもこの pm3d アルゴリズムは、入力された (計測された、あるいは計算された) 領域 の外には何も描かない、という長所があります。
曲面の色づけは、以下のような入力データに関して行われます:
1. 関数、または 1 つか 3 つのデータ列からなるデータの splot: 上に述べ た四辺形の 4 つの角の z 座標の平均値 (または corners2color) から、灰 色の範囲 [0:1] を与える zrange または cbrange の範囲 [min_color_z,max_color_z] への対応により、灰色/カラーの値が得られます。 この値は、直接灰色の色地図用の灰色の値として使うことができます。正規化 された灰色の値をカラーに対応させることもできます - 完全な説明は set palette 参照。
2. 2 つか 4 つのデータ列からなるデータの splot: 灰色/カラーの値は、z の値の代わりに最後の列の座標を使って得られますので、色と z 座標が独立 なものになります。これは 4 次元データの描画に使うことができます。
他の注意:
1. 物理学者の間では、gnuplot の文書やソースに現われる 'iso_curve' (孤 立線) という言葉よりも、上で言及した '走査 (scan)' という言葉の方が使 われています。1 度の走査と他の走査の記録により色地図を評価する、という のはそういう意味です。
2. 'gray' や 'color' の値 (scale) は、滑らかに変化するカラーパレットへ の、連続な変数の線形写像です。その写像の様子は描画グラフの隣に長方形で 表示されます。この文書ではそれを "カラーボックス (colorbox)" と呼び、 その変数をカラーボックス軸の変数と呼びます。set colorbox, set cbrange を参照してください。
3. pm3d の色づけを 3 次元曲面ではなく 2 次元描画に使うには、 set view map か set 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 は塗ら れた多角形の網の重なりの相互作用を計算するような仮想現実ツールではあり ません)。
最初に走査されるデータが最初に描くか最後に描くかを切替えるスイッチオプ ション scansforward と scansbackward を試してみてください。デフォ ルトは scansautomatic で、これは gnuplot に走査の順を推測させます。
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 次元の格子) に対しては image と rgbimage スタイルによって既に行なわれています。
z の値の範囲と曲面の色の値の範囲は、z と cb に関する set log 同様、 set zrange と set cbrange によって独立に調整し得ることに注意して ください。色地図は cb 軸のみで調節されます。set view map と set colorbox も参照してください。
オプション 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 map は set pm3d at b; set view map; set style data pm3d; set style func pm3d; を省略したものです。これは、set view map がな かったころの旧バージョンへの互換性のためのものです。入力データ点をフィ ルタするための zrange、および色の範囲の変更用の cbrange を注意して 適切に使用してください。set (no)surface も 効果 (副作用 ?) があるよ うです。
オプション interpolate は格子点をより細かな網目に補間し、色四角形も 近似的に補間します。データ描画に対しては、これは曲面の色の変化を滑らか にし、曲面の色の尖りを補正します。関数描画に対しては、この補間は細かさ の代わりにメモリを消費してしまう、といったことくらいの意味しかありませ んから、関数描画の場合は普通 samples や isosamples を使うべきでし ょう。
色づけの設定はカラーボックスの描画と同様に set palette で決定されま す。一つの描画では一つのパレットのみが存在し得ます。いくつもの曲面を 異なるパレットで描画するには、origin と size を固定して 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
オプション explicit が ON (または implicit が OFF) の場合、属性
with pm3d が指定された描画のみが pm3d 曲面として描画されます。例えば
splot 'fred.dat' with lines, 'lola.dat' with pm3d
デフォルトのデータ/関数の描画スタイルを pm3d にしたい場合は、例えば
set style data pm3d
いくつかの描画においては、それらはコマンドラインで与えられた順に描画さ れることに注意してください。これは特に、以前の描画を上書きしてそれで一 部を隠してしまう可能性がある、曲面の塗りつぶしに関して関心を持たれるこ とです。
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, set cbrange, set colorbox, x11 pm3d, そしてもちろ んデモファイル demo/pm3d.dem も参考になるでしょう。
竹野茂治@新潟工科大学