起点是我有一个包含4行的图表。它们是我的模拟结果,在4个不同位置的迭代x轴上绘制。我也在每个位置都有实验值。我想在同一图表上将这4个实验值绘制为水平线。我还希望每个位置的模拟和实验结果的线条颜色相同。
在@ Tom的帮助下,我有以下脚本来执行此操作:
unset bars
max = 1e6
set xrange[7000:24000]
set yrange[-0.5:1.5]
plot for [i=2:5] 'sim' using 1:(column(i)) ls i, \
for [i=1:4] 'expt' using (1):1:(max) every ::(i-1)::(i-1) with xerror ls i ps 0
问题在于,我希望xrange[x_min:x_max]
和yrange[y_min:y_max]
中的值取自sim
和expt
,如下所示:
x_min = min(sim[:1]) # where min(sim[:1]) means "min value in file 'sim' col 1"
x_max = max(sim[:1])
y_min = min(sim[:2],sim[:3],sim[:4],sim[:5],expt[:1])
y_max = max(sim[:2],sim[:3],sim[:4],sim[:5],expt[:1])
我的操作系统是科学Linux:版本6.3,内核Linux 2.6.32-358.2.1.el6.x86_64,GNOME 2.28.2
sim
和expt
是.txt文件
sim
的代表性样本是:
7520 0.282511 0.0756715 -0.222863 -0.0898819
7521 0.315944 0.201687 -0.321723 -0.106345
7522 0.230956 0.102217 -0.34196 -0.061009
7523 1.460043 -0.00118292 -0.045077 0.673926
expt
的代表性样本是:
1.112
0.123
-0.45
0.862
感谢您的帮助。
答案 0 :(得分:2)
我认为这是解决问题的一种方法:
unset bars
max = 1e6
set xrange[0:8]
plot for [i=1:4] 2*i+sin(x) ls i, \
for [i=1:4] 'expt' using (1):1:(max) every ::(i-1)::(i-1) with xerror ls i ps 0
根据我在Gnuplot tricks上找到的一些信息,我有(ab)使用误差线根据此数据文件中的点生成水平线:
2
4
6
8
(1):1:(max)
指定应在坐标(1, y)
处绘制点,其中从数据文件中读取y
。 max
是xdelta
的值,用于确定x
错误栏的大小。这是在绘图中实现水平线的一种方法,因为max
的适当大值将导致绘图的整个xrange
出现误差。
这是输出的样子:
答案 1 :(得分:2)
考虑到,您有一个包含五列的数据文件,一个具有x值,另一个具有y值。现在您有一个数字path_to_expt
来自的附加文件。为了绘制具有y值path_to_expt
的列和一条水平线,您可以使用
plot for [i=2:5] path_to_file using 1:(column(i))
此情节第2列对1,3对1对4对1对5对1.要获得不同的样式,只需使用set linetype
重新定义自动分配的线型:
set linetype 1 lc rgb 'orange'
# ... other lt definitions
plot for [i=2:5] path_to_file using 1:(column(i))
如果您不想覆盖exising linetype 1..4,请使用例如11..14:
set linetype 11 lc rgb 'orange'
# ...
plot for [i=2:5] path_to_file using 1:(column(i)) lt (9 + i)
最后,为了绘制水平线,使用与数据文件中相同的x值,使用
mynumber = 27
plot path_to_file using 1:(mynumber)
如果你没有在括号中加上一个数字,它会被解释为列号(就像这里的1
一样),而在括号内,它被视为数字。
另一种选择是设置箭头:
set arrow from graph 0, first mynumber to graph 1, first mynumber lt 1
plot for [i=2:5] path_to_file using 1:(column(i))