在 Gnuplot 中以 loglog 比例绘图时减少数据点的数量

Reducing number of datapoints when plotting in loglog scale in Gnuplot

我有一个大型数据集,需要在 Gnuplot 中以对数对数比例绘制,如下所示:

set log xy
plot 'A_1D_l0.25_L1024_r0.dat' u 1:(-512)

LogLogPlot of my datapoints

Text file with the datapoints

x 轴上的数据点等距分布,但由于对数刻度,它们在图表的右侧变得非常密集,结果输出文件(我最终将其导出为 .tex)变得非常大. 在线性比例中,我会简单地使用选项 every 来减少绘制的点数。 loglogscale 是否有类似的选项,使得标绘点的间距相等?

我知道几年前有人提出过类似的 question,但我认为解决方案并不令人满意:标绘点沿 x 轴的间距不等。我认为这是一个非常简单的问题,值得更清晰的解决方案。

据我了解,您不想绘制实际数据点;你只想画一条线穿过它们。但是你想保持点的外观而不是一条线。是吗?

  set log xy
  plot 'A_1D_l0.25_L1024_r0.dat' u 1:(-512) with lines dashtype '.' lw 2

修改后的答案

如果在数据集中呈现 outliers/errors 很重要,那么您不得使用 every 或任何其他简单丢弃或跳过大部分数据点的技术。在那种情况下,我更喜欢您在原始问题中显示的情节 with points ,可能会修改为将每个点表示为一个点而不是一个十字。我将通过修改你的 500000 点数据集中的一个点来模拟这一点(下图第一张)。但我还建议,如果绘制 with lines(下图第二个图),异常值的存在会更加明显。

显示误差边界是噪声数据的另一种选择,但选项取决于您必须在数据集中处理的内容。如果您想继续,请提出一个单独的问题。

如果你真的想减少要绘制的数据数量,你可以考虑以下脚本。

s = 0.1           ### sampling interval in log scale
                  ###  (try 0.05 for more detail)

c = log10(0.01)   ### a parameter used in sampler(x) 
                  ### which should be initialized by 
                  ### smaller value than any x in log scale

sampler(x) = (x>0 && log10(x)>=c) ? (c=ceil(log10(x)/s+0.5)*s, x) : NaN

set log xy
set grid xtics
plot 'A_1D_l0.25_L1024_r0.dat' using (sampler()):(-512) with points pt 7 lt 1 notitle , \
     'A_1D_l0.25_L1024_r0.dat' using 1:(-512) with lines lt 1 notitle

此脚本在对数刻度的 x 轴上以大约 0.1 的增量对数据进行采样。它利用了属性不绘制x值为NaN的点。