Gnuplot将每一个点连接在一起

时间:2016-04-11 23:10:15

标签: gnuplot

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

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

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

enter image description here

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

enter image description here

我做错了什么?

以下是一些数据:

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

它的标签分隔,新行分开

1 个答案:

答案 0 :(得分:4)

问题在于您的积分顺序。 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生成以下

enter image description here

这里对点进行编号以显示它们的绘制顺序。我们可以看到在数据文件中连续出现的点是连接的。

排序数据

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生成以下

enter image description here

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

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

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

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

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

<小时/> 显示的绘图命令仅绘制线条。为了获得数字标签,我们使用

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来捕获平滑后的数据,然后绘制数据。做

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命令将现在排序的数据与标签一起绘制。这允许gnuplot自己完成所有排序,但同样,这只有在第一列中的值是唯一的时才有效。