3

次の方法でgnuplotを使用していくつかのプロットを配置したい:

 +------------------------+
 |plot1                   |
 |                        |
 +------------------------+
 +----------++------------+
 |plot2     ||plot3       |
 |          ||            |
 +----------++------------+
 +----------++------------+
 |plot4     ||plot5       |
 |          ||            |
 +----------++------------+

シンプルな nxm レイアウトは次の方法で実現できます( 公式 Web サイトでset multiplot layout n,mこれらのデモを参照してください)。

matplotlibドキュメントでわかるように、はるかに高度な可能性を提供します: Customizing Location of Subplot Using GridSpec

gnuplot 内で、これを達成するために使用set originset sizeました。しかし、後でレイアウトを変更したい場合は、サイズや位置を再計算する必要があり、かなり面倒です。

注意 1: 適切なプロット サイズを実現するために、余白を固定サイズに設定すると便利な場合もあります。xlabels などを変更することによる自動計算では、正しいレイアウトを実現することがさらに難しくなります。

注意 2:origin/size gnuplotの代わりに、set [lrbt]margin <> at screenプロットの境界線を設定する別の可能性を提供します。ユーザーは、タイトルとラベル用に十分なスペースがあることを確認する必要があります ( demoを参照)。まだ完全な解決策ではありませんが、より便利な場合もあります。

レイアウトを作成するためのツールを認識していない、または存在する可能性はありますか?

4

2 に答える 2

3

コメントに記載されているように、特定のレイアウトの最小限の動作例。

set term pngcairo size 5.0in,6.0in
set output "test_layout.png"
ROWS=3
COLS=2
set multiplot layout ROWS,COLS upwards
plot sin(4*x) # plot 4
plot sin(5*x) # plot 5
plot sin(2*x) # plot 2
plot sin(3*x) # plot 3
set size 1,(1.0/ROWS)
plot sin(1*x) # plot 1:
unset multiplot

このソリューションは、最初 (最後) の行のみが異なる限り機能し、それ以外はすべて nxm スキームに従います。ただし、たとえば、最初の行に異なる高さを簡単に指定することはできません。

$ gnuplot -d file.gp:

ここに画像の説明を入力

ただし、一般的な問題に取り組む他の方法にはまだ興味があります。

于 2013-04-09T15:28:21.803 に答える
1

matplotlib からジオメトリを取得できます。2 つのファイルsubplot2grid2gnuplot.pysubplot2grid.gpを作成します。test.gpは使用例です。

subplot2grid2gnuplot.py

import matplotlib.pyplot as plt
import sys

if len(sys.argv)<6:
    sys.stderr.write("ERROR: subplot2grid2gnuplot.py needs 6 arguments\n")
    sys.exit(1)

shape = (int(float(sys.argv[1])), int(float(sys.argv[2])))
loc   = (int(float(sys.argv[3])), int(float(sys.argv[4])))
colspan = int(float(sys.argv[5]))
rowspan = int(float(sys.argv[6]))

ax = plt.subplot2grid(shape, loc, colspan, rowspan)
print "%f %f %f %f" % ax._position.bounds

subplot2grid.gp

# Return origin and size of the subplot
# Usage:
# call subplot2grid.gp shape1 shape1 loc1 loc2 colspan rowspan
# Sets:
# or1, or2, size1, size2

aux_fun__(shape1, shape2, loc1, loc2, colspan, rowspan) = \
   system(sprintf("python subplot2grid2gnuplot.py  %i %i %i %i %i %i %i", shape1, shape2, loc1, loc2, colspan, rowspan))

aux_string__= aux_fun__($0, $1, $2, $3, $4, $5)
or1=word(aux_string__,1)
or2=word(aux_string__,2)
size1=word(aux_string__,3)
size2=word(aux_string__,4)

test.gp

unset xtics
unset ytics

set multiplot

call "subplot2grid.gp" 3 3 0 0 1 3
set size size1, size2
set origin or1, or2
plot sin(x)

call "subplot2grid.gp" 3 3 1 0 1 2
set size size1, size2
set origin or1, or2
plot sin(x)

call "subplot2grid.gp" 3 3 1 2 2 1
set size size1, size2
set origin or1, or2
plot sin(x)

call "subplot2grid.gp" 3 3 2 0 1 1
set size size1, size2
set origin or1, or2
plot sin(x)

call "subplot2grid.gp" 3 3 2 1 1 1
set size size1, size2
set origin or1, or2
plot sin(x)

unset multiplot

例

于 2013-04-10T18:10:17.517 に答える