我希望以下列方式放置几个带gnuplot的图:
+------------------------+
|plot1 |
| |
+------------------------+
+----------++------------+
|plot2 ||plot3 |
| || |
+----------++------------+
+----------++------------+
|plot4 ||plot5 |
| || |
+----------++------------+
简单的nxm布局可以通过set multiplot layout n,m
实现(请参阅这些demos在官方网站上进行说明)。
matplotlib
提供了更高级的可能性,如文档中所示:Customizing Location of Subplot Using GridSpec。
在gnuplot中,我使用了set origin
和set size
来实现这一目标。但是,它很麻烦,当您发现之后想要更改布局时,需要重新计算尺寸和位置。
备注1: 通常,将边距设置为固定尺寸以获得正确的绘图尺寸也很有用。通过改变xlabels等进行自动计算会使得实现正确布局变得更加困难。
备注2:而不是origin/size
gnuplot提供了使用set [lrbt]margin <> at screen
设置绘图边框的另一种可能性。用户必须确保标题和标签有足够的空间(请参阅demo)。仍然不是一个完美的解决方案,但有时更方便。
是否有可能我不知道或者可能存在创建布局的工具?
答案 0 :(得分:2)
评论中提到的给定布局的最小例子。
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:
但是,我仍然对解决这个问题的其他方法感兴趣。
答案 1 :(得分:1)
您可以从matplotlib获取几何体。创建两个文件 subplot2grid2gnuplot.py 和 subplot2grid.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