使用相同的彩色线在现有图形上绘制gnuplot中的水平线

时间:2014-11-09 20:30:22

标签: gnuplot

起点是我有一个包含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]中的值取自simexpt,如下所示:

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

simexpt是.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

感谢您的帮助。

2 个答案:

答案 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)处绘制点,其中从数据文件中读取ymaxxdelta的值,用于确定x错误栏的大小。这是在绘图中实现水平线的一种方法,因为max的适当大值将导致绘图的整个xrange出现误差。

这是输出的样子:

plot with horizontal lines

答案 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))