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

使用相同颜色的线在现有图形上的gnuplot中绘制水平线,gnuplot,Gnuplot,首先,我有一个图,上面有4条线。它们是我的模拟结果,绘制在迭代的x轴上,在4个不同的位置。我在每个位置都有实验值。我想把这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] '

首先,我有一个图,上面有4条线。它们是我的模拟结果,绘制在迭代的x轴上,在4个不同的位置。我在每个位置都有实验值。我想把这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
问题是我希望从sim卡中获取xrange[x_min:x_max]和yrange[y_min:y_max]中的值,并按如下方式导出:

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])
我的操作系统是Scientific Linux:版本6.3,内核Linux 2.6.32-358.2.1.el6.x86_64,GNOME 2.28.2

sim和expt是.txt文件

sim卡的一个代表性样本是:

expt的代表性样本为:


谢谢您的帮助。

我认为这是解决您问题的一种方法:

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
根据我在上找到的一些信息,我滥用了错误条,根据此数据文件中的点生成水平线:

2
4
6
8
1:1:max指定应在坐标1 y处绘制点,其中y从数据文件中读取。max是xdelta的值,它决定了x错误条的大小。这是在绘图中实现水平线的一种方法,因为适当大的max值将导致整个绘图范围内出现错误条

以下是输出结果:


我认为这是解决您问题的一种方法:

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
根据我在上找到的一些信息,我滥用了错误条,根据此数据文件中的点生成水平线:

2
4
6
8
1:1:max指定应在坐标1 y处绘制点,其中y从数据文件中读取。max是xdelta的值,它决定了x错误条的大小。这是在绘图中实现水平线的一种方法,因为适当大的max值将导致整个绘图范围内出现错误条

以下是输出结果:


考虑到,您有一个包含五列的数据文件,一列包含x值,四列包含y值。现在您有了一个额外的文件,其中有一个编号路径\u to \u expt。为了绘制列和一条具有y值路径的水平线,可以使用

plot for [i=2:5] path_to_file using 1:(column(i))
这张图是第2列与第1列、第3列与第1列、第4列与第1列、第5列与第1列的对比图。要获得不同的样式,只需使用“设置线型”重新定义自动指定的线型:

set linetype 1 lc rgb 'orange' 
# ... other lt definitions
plot for [i=2:5] path_to_file using 1:(column(i))
如果不想覆盖现有线型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))

考虑到,您有一个包含五列的数据文件,一列包含x值,四列包含y值。现在您有了一个额外的文件,其中有一个编号路径\u to \u expt。为了绘制列和一条具有y值路径的水平线,可以使用

plot for [i=2:5] path_to_file using 1:(column(i))
这张图是第2列与第1列、第3列与第1列、第4列与第1列、第5列与第1列的对比图。要获得不同的样式,只需使用“设置线型”重新定义自动指定的线型:

set linetype 1 lc rgb 'orange' 
# ... other lt definitions
plot for [i=2:5] path_to_file using 1:(column(i))
如果不想覆盖现有线型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))

我很感激你已经做出努力来降低问题的复杂性,但是仍然有很多具体细节可能会给问题蒙上阴影。目前,要想重现这个问题,还有很多工作要做。你的介绍性段落和闭幕式与问题不太相关,所以也许你应该考虑删除它们。我知道开始GnU情节很困难。在你的问题中有几个不清楚的部分。在你写下你的问题后,你必须问自己:我是否为其他人提供了足够的信息,以便他们能够重现我的问题?路径_到_文件处的文件是什么样子的?路径_到_expt应该来自哪个文件?你有哪些操作系统?等等,在一个问题上,我给了你一个到另一个问题的链接,在我看来,这个问题与从数据文件中提取单个值是一样的。我从未得到任何反馈。这就是评论的目的。我+1想知道你的评论,我+1想知道你给我指的那篇文章的答案。我试图使用stats命令,然后又走了另一条路。对不起,我没有评论。我还在想办法

我很感激你已经做出努力来降低问题的复杂性,但仍然有很多具体细节可能会给问题蒙上阴影。目前,要想重现这个问题,还有很多工作要做。你的介绍性段落和闭幕式与问题不太相关,所以也许你应该考虑删除它们。我知道开始GnU情节很困难。在你的问题中有几个不清楚的部分。在你写下你的问题后,你必须问自己:我是否为其他人提供了足够的信息,以便他们能够重现我的问题?路径_到_文件处的文件是什么样子的?路径_到_expt应该来自哪个文件?你有哪些操作系统?等等,在一个问题上,我给了你一个到另一个问题的链接,在我看来,这个问题与从数据文件中提取单个值是一样的。我从未得到任何反馈。这就是评论的目的。我+1想知道你的评论,我+1想知道你给我指的那篇文章的答案。我试图使用stats命令,然后又走了另一条路。对不起,我没有评论。“我仍在努力解决这个问题,完成后,我会做出适当的评论。谢谢你,”汤姆说。我从你的答案开始,因为它似乎更容易理解。我有一个关于xrange的问题。我可以在xrange中使用从路径\到\文件的参数吗?作为对上面@Christoph评论的回答,path_to_文件是一个纯文本文档,大小为121列,约16000行。我希望xrange[min:max]的参数是min=path_to_file[row=0:col=1]和max=path_to_file[row=last:col=1]。我不知道路径到文件将有多少行。路径\到\也是一个纯文本文件,大小:31列,121行。我的操作系统是Scientific Linux 6.3 x86_64。我运行了您的脚本,手动输入xrange[min:max]的值,并注意到水平线仅在其值在Y范围内时才绘制。我没有设置yrange,因为以前默认设置是有效的,但我认为现在需要设置yrange[min:max]。我的问题与上面我评论中的问题类似。我想要min=minpath\u to_expt[col28]和max=maxpath\u to_expt[col28]。是否可以在yrange中设置从路径_到_expt的参数?目前没有时间看这个问题,但以后可能会看。同时,对您的问题进行一些修改,以包括所有这些细节以及您的数据的小样本(如果您还没有这样做的话),这将是非常有帮助的。我已经修改了问题,但它与原始问题有很大不同,因为我知道您的答案回答了我的原始问题。接受你的答案并开始一个新问题会更好吗?是的,在这种情况下,通常最好开始一个新问题。谢谢你,汤姆。我从你的答案开始,因为它似乎更容易理解。我有一个关于xrange的问题。我可以在xrange中使用从路径\到\文件的参数吗?作为对上面@Christoph评论的回答,path_to_文件是一个纯文本文档,大小为121列,约16000行。我希望xrange[min:max]的参数是min=path_to_file[row=0:col=1]和max=path_to_file[row=last:col=1]。我不知道路径到文件将有多少行。路径\到\也是一个纯文本文件,大小:31列,121行。我的操作系统是Scientific Linux 6.3 x86_64。我运行了您的脚本,手动输入xrange[min:max]的值,并注意到水平线仅在其值在Y范围内时才绘制。我没有设置yrange,因为以前默认设置是有效的,但我认为现在需要设置yrange[min:max]。我的问题与上面我评论中的问题类似。我想要min=minpath\u to_expt[col28]和max=maxpath\u to_expt[col28]。是否可以在yrange中设置从路径_到_expt的参数?目前没有时间看这个问题,但以后可能会看。同时,对您的问题进行一些修改,以包括所有这些细节以及您的数据的小样本(如果您还没有这样做的话),这将是非常有帮助的。我已经修改了问题,但它与原始问题有很大不同,因为我知道您的答案回答了我的原始问题。接受你的答案并开始一个新问题会更好吗?是的,在这种情况下,通常最好开始一个新问题。谢谢,@Christoph。最后我同意了汤姆的答案,但我发现你的答案很有用!谢谢,克里斯托夫。最后我同意了汤姆的答案,但我发现你的答案很有用!