绘制多条曲线

时间:2019-04-10 07:34:15

标签: gnuplot

几年前,我开始从软件中使用GNUPLOT,它非常有用。我的软件会生成一个包含所有数据的gnuplot命令文件,然后自动调用GNUPLOT在屏幕或文件上绘制该文件。在某些情况下,我的软件会生成多行作为变量的函数,并且在这种情况下,我编写了一个包含多列的表格,但是我没有设法绘制一张表格中的所有曲线,因此我发现的解决方案是使用多个绘图命令,例如/ p>

plot "-" using 3:2 with lines ls  1 title "X(LIQUID,CU)",\
"" using   4:2 with lines ls  2 title "X(FCC-A1,CU)",\
"" using   5:2 with lines ls  3 title "X(FCC-..O#2,CU)" 

此表重复了多次绘制命令(每次以“ e”结束)。 最近,我开始尝试清理代码,我发现GNUPLOT具有“ plot for”命令,因此尝试使用它。例如:

plot for [i=3:5] './table1.dat' using i:2 with lines ls i columnhead(i)

工作得很好,除了我希望将表与GNUPLOT命令放在同一文件中。用“-”替换“ ./table1.dat”然后写表(末尾包括3个“ e”)是行不通的,因为那样我就只能绘制第一行了。如果我像以前一样重复该表(在中间使用“ e”),则该方法有效,但是我又回到了已有的解决方案。 我试图在“ e”之后添加“ repeat”,但没有成功。 早些时候我尝试了多图,但后来缩放时遇到了问题。

绘制工作正常,只是我想避免冗长而令人困惑的是,我想绘制的每一行重复(同样在我的代码中)同一张表。 我需要确定必须有一些微妙的方法来做我想做的事,但我在手册中找不到它。

Bo Sundman

2 个答案:

答案 0 :(得分:2)

自版本5.0以来,gnuplot已命名数据块,可让您在单个文件中定义可重复使用的内联数据:

$Table <<EOD
1 11 111
2 22 222
3 33 333
EOD
plot for [i=2:3] $Table using 1:i with lines

答案 1 :(得分:0)

您需要重复数据的原因是gnuplot正在读取时进行绘图。因此,它需要多次读取数据才能获取图表。

您可以先将数据写入某个临时文件,然后将其绘制:

F=system("mktemp /tmp/gnuplot-XXXXXXXX")
TITLES="A B C D"
set table F
plot "-" u 1:2:3:4:5 w table
0 1 2 3 4 
1 6 7 8 9 
e 
plot for [i=2:5] F u 1:i tit word(TITLES,i-1)

问题在于set table不支持导出columheads AFAIK,因此不建议导出单词列表。