在Gnuplot'中的特定值上显示标记;s线图

在Gnuplot'中的特定值上显示标记;s线图,gnuplot,cdf,linestyle,Gnuplot,Cdf,Linestyle,我在一个文件中有CDF的数据,如下所示: 0.033 0.0010718113612 0.034 0.0016077170418 0.038 0.0021436227224 ... ... ... ... 0.847 0.999464094319 0.862 1.0 plot file1 using 1:2 title 'Test Line CDF' with linespoints ls 1 plot "data" with lines, "data" every 10 with po

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

0.033 0.0010718113612
0.034 0.0016077170418
0.038 0.0021436227224
...  ...
...  ...
0.847 0.999464094319
0.862 1.0
plot file1 using 1:2 title 'Test Line CDF' with linespoints ls 1
plot "data" with lines, "data" every 10 with points pt 7 lc 1
第一列是X轴值,第二列是Y轴上的CDF值。我将线条样式设置如下:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75   # --- blue
然后用以下内容绘制线:

0.033 0.0010718113612
0.034 0.0016077170418
0.038 0.0021436227224
...  ...
...  ...
0.847 0.999464094319
0.862 1.0
plot file1 using 1:2 title 'Test Line CDF' with linespoints ls 1
plot "data" with lines, "data" every 10 with points pt 7 lc 1
这一切都很好,问题似乎是我的CDF文件非常大(大约250行),Gnuplot会为每个数据点绘制标记/点(本例中是一个圆圈)。这导致了一条非常“密集”的线,因为标记物过于集中,以至于下面的线几乎不可见,如我在下面的示例图像中所示:


我如何有选择地绘制标记,以便不必在所有数据点上绘制标记,而是在每50个数据点之后绘制标记,而不必减少数据点的数量(我相信这就是plot命令中的
“每n”
所能做的)在我的数据文件中或减小标记大小?

您可以绘制同一函数两次,一次仅绘制直线,然后每n个点绘制一个点。这将在不减少线段数量的情况下绘制更少的点。我想这就是你想要实现的。对于这个例子,我做了
设置表“data”;绘制sin(x)
以生成sin(x)函数的数值采样

您目前拥有的是:

plot "data" with linespoints pt 7

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

0.033 0.0010718113612
0.034 0.0016077170418
0.038 0.0021436227224
...  ...
...  ...
0.847 0.999464094319
0.862 1.0
plot file1 using 1:2 title 'Test Line CDF' with linespoints ls 1
plot "data" with lines, "data" every 10 with points pt 7 lc 1
这给了你想要的:


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

虽然@Miguel比我做得更好,但我也在下面发布了我的解决方案:

其思想是先画一次线,然后用“everyn”说明符画点。我以以下方式更改了自己的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


这样可以保留漂亮的曲线,而不会对其进行过粗量化,同时也可以使点之间的间隔更好。

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

plot 'data' pointinterval 5 with linespoints
这将绘制每条线段,但仅绘制每五个点符号

最大的优点是,您可以使用
设置样式行
控制行为:

set style line 1 lc rgb 'blue' lt 1 lw 2 pt 7 ps 0.75 pi 5
plot 'data' w lp ls 1

我不确定我是否理解您的问题:是否仅对曲线的部分使用
every n
命令?否则,为什么不跳过
每n
和减少标记大小就行了?@Schorsch,基本上如果你使用
每n
那么你实际上在绘图中丢失了点,导致CDF看起来有点量化,即丢失了漂亮的曲线。事实上,我已经解决了这个问题,并在下面发布了我的解决方案。这正是我所做的。很好的解决方案。但我想知道,我如何才能绘制固定数量的点,而不是每5点绘制一次?。这可能吗?@Nikko不直接说。您可以使用stats获取记录数,然后使用2计算步骤:
stats'file.dat;ev=地板(统计记录);打印'file.dat'pi ev