我正在gnuplot中绘制数据,如下所示:
set terminal pdf
set output "Planck.pdf"
plot "CalculatedValues.dat" u 1:2 t "Dawn" pt 1 ps .1 with lines
但是我的输出最终看起来像是纱线雕塑,
我希望输出看起来像,但是是折线图而不是散点图。
我究竟做错了什么?
这是一些数据:
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
产生以下内容†在此处对点进行编号以显示其绘制顺序。我们可以看到数据文件中连续出现的点已连接。
排序数据
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
产生以下内容†在这里,我们看到绘制了相同的点,但是顺序不同。同样,连续的点被连接,但是以递增的顺序进行,因为在这种情况下对数据进行了排序。
解决方案是首先对数据进行排序。要么让程序生成的数据在生产过程中对其进行排序,要么使用外部程序在绘图前对其进行排序。
如果第一列中的值是唯一的,则可以对原始未排序数据使用一个平滑选项。例如,
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自己进行所有排序,但是同样,这仅在第一列中的值唯一时才起作用。