我在 gnuplot 中绘制数据,如下所示:
set terminal pdf
set output "Planck.pdf"
plot "CalculatedValues.dat" u 1:2 t "Dawn" pt 1 ps .1 with lines
Run Code Online (Sandbox Code Playgroud)
但我的输出最终看起来像一个纱线雕塑,
我希望输出看起来像一个折线图而不是散点图。
我究竟做错了什么?
这是一些数据:
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
Run Code Online (Sandbox Code Playgroud)
它是制表符分隔和新行分隔
问题在于您的积分顺序。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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
plot datafile u 1:2 w linespoints pt 7产生以下†
在这里,我们看到绘制了相同的点,但顺序不同。同样,连续的点是连接的,但按递增顺序完成,因为数据是这样排序的。
如果第一列中的值是唯一的,则可以对原始未排序数据使用一个平滑选项。例如,
plot datafile u 1:2 smooth unique w linespoints pt 7
Run Code Online (Sandbox Code Playgroud)
将产生与使用排序数据绘图相同的结果。‡ 这是因为平滑唯一选项首先按 x 列对数据进行排序。y 值被替换为具有相应 x 值的所有 y 值的平均值。如果 x 值是唯一的,这意味着保留原始数据,只是按排序顺序。
plot datafile u 1:2 w linespoints pt 7, \
"" u 1:2:(sprintf("%d",$0+1)) w labels offset 0,graph 0.05
Run Code Online (Sandbox Code Playgroud)
它在每个点坐标处绘制一个标签,向上移动图形范围的 5%(使用图形坐标系)。由于 0 伪列(行号)是从 0 开始的,我们添加 1 以生成标签,我们将给出从 1 开始的标签。
‡如果我们想在这里标记点,我们必须使用 set table 来捕获平滑的数据,然后绘制数据。正在做
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
Run Code Online (Sandbox Code Playgroud)
将完全生成上面的排序图。数据被捕获到一个临时文件中,第一个绘图命令只生成点。以下 plot 命令将现在排序的数据与标签一起绘制。这允许 gnuplot 自己进行所有排序,但同样,这仅在第一列中的值唯一时才有效。