99.54 多重描画モード (multiplot)

コマンド set multiplotgnuplot を多重描画モードにします。これ は、複数のグラフを同じページや同じスクリーンウィンドウに隣り同士に並 べて表示します。

書式:

     set multiplot
         { title <page title> {font <fontspec>} {enhanced|noenhanced} }
         { layout <rows>,<cols>
           {rowsfirst|columnsfirst} {downwards|upwards}
           {scale <xscale>{,<yscale>}} {offset <xoff>{,<yoff>}}
           {margins <left>,<right>,<bottom>,<top>}
           {spacing <xspacing>{,<yspacing>}}
         }
     set multiplot {next|previous}
     unset multiplot

出力形式 (terminal) によっては、コマンド unset multiplot が与えられ るまで何の描画も表示されないことがあります。この場合このコマンドにより ページ全体の描画が行なわれ、gnuplot は標準の単一描画モードになります。 それ以外の出力形式では、各 plot コマンドがそれぞれ表示を更新します。

コマンド clear は、次の描画に使う長方形領域を消すのに使えます。典型 的には、大きいグラフの内部に小さなグラフを挿入するような場合に必要です。

定義済の見出しやベクトルは、各描画において、毎回現在のサイズと原点に従 って書かれます (それらが screen 座表系で定義されていない場合)。それ 以外の全ての set で定義されるものも各描画すべてに適用されます。もし 1 度の描画にだけ現われて欲しいものを作りたいなら、それが例えば日付 (timestamp) だとしたら、set multiplotunset multiplot で囲まれ たブロック内の plot (または splot, replot) 命令の一つを set timeunset time ではさんでください。

multiplot のタイトルは、個々の描画タイトルがあったとしても、それとは別 のもので、ページの上部にそのためのキャンバス全体の幅にわたるスペースが 確保されます。

layout が指定されていない場合、あるいはより良い位置決めをしたい場合は、 コマンド set originset size 各描画で正しい位置に設定する必要が あります。詳細は、以下参照: set origin (p. [*]), set size (p. [*])

例:

     set multiplot
     set size 0.4,0.4
     set origin 0.1,0.1
     plot sin(x)
     set size 0.2,0.2
     set origin 0.5,0.5
     plot cos(x)
     unset multiplot

これは、cos(x) のグラフを、sin(x) の上に積み重ねて表示します。

set sizeset origin は全体の描画領域を参照し、それは各描画で利 用されます。以下も参照: set term size (p. [*])。描画境界を一列に揃えたいなら ば、set margin コマンドで、境界の外の余白サイズを同じサイズに揃える ことが出来ます。その使用に関しては、以下参照: set margin (p. [*])。余白サイズ は文字サイズ単位の絶対的な数値単位を使用することに注意してください。よ って残ったスペースに描かれるグラフは表示するデバイスの表示サイズに依存 します。例えば、プリンタとディスプレイの表示は多分違ったものになるでし ょう。

オプション layout により、各描画の前にそれぞれ与えていた set sizeset origin コマンドなしに、単純な複数グラフの描画を作成できます。 それらの設定は自動的に行なわれ、いつでもその設定を変更できます。 layout では表示は <rows> 行と <cols> 列の格子に分割され、各格子は、 その後に続く対応する名前のオプションによって行 (rowsfirst)、あるいは列 (columnsfirst) が先に埋められて行きます。描画グラフの積み上げは下方向 (downwards) に、または上方向 (upwards) に伸びるようにできます。デ フォルトは rowsfirstdownwards です。 コマンド set multiplot nextset multiplot previous は、レイアウ トオプションを使用している場合のみに関係します。next は、格子内の次 の位置をスキップし、空白を残します。prev は、直前に描画した位置の直 前の格子位置に戻ります。

各描画は scale で伸縮を、offset で位置の平行移動を行なうことができ ます。scale や offset の y の値が省略された場合は、x の値がそれに使用 されます。unset multiplot により自動配置機能はオフになり、そして set sizeset origin の値は set multiplot layout の前の状態に 復帰されます。

例:

     set size 1,1
     set origin 0,0
     set multiplot layout 3,2 columnsfirst scale 1.1,0.9
     [ ここには 6 つまでの描画コマンド ]
     unset multiplot

上の例では 6 つの描画が 2 列の中に上から下へ、左から右へと埋められて行 きます。各描画は水平サイズが 1.1/2、垂直サイズが 0.9/3 となります。

他にも、そのレイアウト内のすべてのグラフに一様なマージンをオプション layout marginsspacing で設定することができますが、これは一緒に 使う必要があります。margins は、格子配置の複数グラフ全体の外側に対す るマージンを設定します。

spacing は、隣接する部分グラフ間の隙間を与えますが、characterscreen 単位で指定することもできます。単一の値を指定すると、それは x, y の両方の方向に使用されますが、2 つの異なる値を指定することもできます。

一つの値に単位がなければ、直前のマージン設定のものを使用します。

例:

     set multiplot layout 2,2 margins 0.1, 0.9, 0.1, 0.9 spacing 0.0

この場合、左にあるグラフの左の境界は、スクリーン座標の 0.1 に置かれ、 右にあるグラフの右の境界はスクリーン座標 0.9 の場所に置かれる、等とな ります。各グラフの隙間は 0 に指定しているので、内側の境界線は重なりま す。

例:

     set multiplot layout 2,2 margins char 5,1,1,2 spacing screen 0, char 2

これは、左のグラフの境界は、キャンバスの左端から 5 文字幅の場所に、右 のグラフの右の境界は、キャンバスの端から 1 文字幅の場所にあるようなレ イアウトを生成します。下のマージンは 1 文字分の高さ、上のマージンは 2 文字分の高さになります。グラフ間の水平方向の隙間はありませんが、縦方向 には 2 文字分の高さに等しい隙間があります。

例:

     set multiplot layout 2,2 columnsfirst margins 0.1,0.9,0.1,0.9 spacing 0.1
     set ylabel 'ylabel'
     plot sin(x)
     set xlabel 'xlabel'
     plot cos(x)
     unset ylabel
     unset xlabel
     plot sin(2*x)
     set xlabel 'xlabel'
     plot cos(2*x)
     unset multiplot

以下も参照 multiplot のデモ (multiplt.dem)

竹野茂治@新潟工科大学
2020-04-28