我正在gnuplot中绘制数据,如下所示:

set terminal pdf
set output "Planck.pdf"
plot "CalculatedValues.dat" u 1:2 t "Dawn" pt 1 ps .1 with lines


但是我的输出最终看起来像是纱线雕塑,

gnuplot - Gnuplot将每个点连接在一起-LMLPHP

我希望输出看起来像,但是是折线图而不是散点图。

gnuplot - Gnuplot将每个点连接在一起-LMLPHP

我究竟做错了什么?

这是一些数据:

13.4904 3.13714e+07     3.91106e+07
11.3872 4.64475e+07     5.96647e+07
18.0928 1.40999e+07     1.69117e+07
13.3284 3.23223e+07     4.03737e+07
1.3264  3309.46 24012.2
0.323113        5.16869e-25     1.764e-21
10.6252 5.35423e+07     6.97629e+07


用制表符分隔和换行

最佳答案

问题在于您的积分顺序。 Gnuplot将用线连接文件中的连续点。如果这些点基于x轴值(在此情况下为第一列)按顺序排列,则将得到所要包含的内容。如果不是这样,您将看到奇怪的结果。

未分类的数据

13.4904   3.13714e+07   3.91106e+07
11.3872   4.64475e+07   5.96647e+07
18.0928   1.40999e+07   1.69117e+07
13.3284   3.23223e+07   4.03737e+07
1.3264    3309.46       24012.2
0.323113  5.16869e-25   1.764e-21
10.6252   5.35423e+07   6.97629e+07


plot datafile u 1:2 w linespoints pt 7产生以下内容†

gnuplot - Gnuplot将每个点连接在一起-LMLPHP

在此处对点进行编号以显示其绘制顺序。我们可以看到数据文件中连续出现的点已连接。

排序数据

0.323113   5.16869e-25   1.764e-21
1.3264     3309.46       24012.2
10.6252    5.35423e+07   6.97629e+07
11.3872    4.64475e+07   5.96647e+07
13.3284    3.23223e+07   4.03737e+07
13.4904    3.13714e+07   3.91106e+07
18.0928    1.40999e+07   1.69117e+07


plot datafile u 1:2 w linespoints pt 7产生以下内容†

gnuplot - Gnuplot将每个点连接在一起-LMLPHP

在这里,我们看到绘制了相同的点,但是顺序不同。同样,连续的点被连接,但是以递增的顺序进行,因为在这种情况下对数据进行了排序。


解决方案是首先对数据进行排序。要么让程序生成的数据在生产过程中对其进行排序,要么使用外部程序在绘图前对其进行排序。

如果第一列中的值是唯一的,则可以对原始未排序数据使用一个平滑选项。例如,

plot datafile u 1:2 smooth unique w linespoints pt 7


将产生与使用排序的数据进行绘图相同的结果。‡这是因为平滑唯一选项首先按x列对数据进行排序。 y值将替换为所有y值与相应x值的平均值。如果x值是唯一的,则意味着原始数据将按排序顺序保留。


†显示的plot命令将仅绘制线。为了获得数字标签,我们使用

plot datafile u 1:2 w linespoints pt 7, \
           "" u 1:2:(sprintf("%d",$0+1)) w labels offset 0,graph 0.05


在每个向上移动图形范围5%的点坐标处绘制标签(使用图形坐标系)。由于0伪列(行号)是基于0的,因此我们添加以生成标签,我们将给出基于1的标签。

‡如果要在此处标记点,则必须使用设置表来捕获平滑数据,然后绘制数据。在做

set table "tempfile"
plot datafile u 1:2 smooth unique
unset table
plot "tempfile" u 1:2 w linespoints pt 7, \
             "" u 1:2:(sprintf("%d",$0+1)) w labels offset 0,graph 0.05


会产生上面的排序图。数据被捕获到一个临时文件中,并且第一个plot命令仅生成点。下面的plot命令将现在排序的数据与标签一起绘制。这允许gnuplot自己进行所有排序,但是同样,这仅在第一列中的值唯一时才起作用。

08-25 10:47
查看更多