2

我在一个文件中有一个 CDF 的数据,如下所示:

0.033 0.0010718113612
0.034 0.0016077170418
0.038 0.0021436227224
...  ...
...  ...
0.847 0.999464094319
0.862 1.0

第一列是 X 轴值,第二列是 Y 轴上的 CDF 值。我设置线条样式如下:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75   # --- blue

然后用以下内容绘制线:

plot file1 using 1:2 title 'Test Line CDF' with linespoints ls 1

这一切都很好,问题似乎是我的 CDF 文件非常大(大约 250 行),Gnuplot 会为每个数据点绘制标记/点(在这种情况下是一个圆圈)。这会导致一条非常“密集”的线,因为标记过度集中,以至于下面的线几乎不可见,如下面的示例图像所示:

在此处输入图像描述

如何有选择地绘制标记,而不是将它们放在所有数据点上,而是在每 50 个数据点之后绘制它们,而不必减少数据点的数量(我相信"every n"在 plot 命令中会这样做)我的数据文件或减小标记大小?

4

3 回答 3

5

不需要使用两个绘图命令,只需使用pointinterval选项:

plot 'data' pointinterval 5 with linespoints

这会绘制每个线段,但仅绘制每五个点符号。

最大的优势是,您可以通过以下方式控制行为set style line

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75 pi 5
plot 'data' w lp ls 1
于 2014-04-18T17:57:12.460 回答
1

您可以绘制相同的函数两次,一次只用线绘制,然后每 n 个点绘制一次。这将在不减少分段数量的情况下绘制更少的点。我认为这是您想要实现的目标。对于这个例子,我已经完成set table "data" ; plot sin(x)了生成sin(x)函数的数值采样。

你现在拥有的是:

plot "data" with linespoints pt 7

这使

在此处输入图像描述

现在您可以执行以下操作:

plot "data" with lines, "data" every 10 with points pt 7 lc 1

这给了你想要的:

在此处输入图像描述

您可以更改样式以满足您的需求。

于 2014-04-17T17:22:52.340 回答
1

尽管@Miguel 击败了我,但我也在下面发布了我的解决方案:

这个想法是先画线,然后用“every n”说明符画点。我以以下方式更改了自己的 Gnuplot 脚本。一种黑客但有效:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0   # --- blue

plot file1 using 1:2 title '' with linespoints ls 1, "" using 1:2 every 20 title 'Test Line CDF' with points ls 1 ps 0.75

在此处输入图像描述

这保留了漂亮的曲线,不会过于粗略地量化它,同时也保持点的间距更好。

于 2014-04-17T17:40:15.043 回答