0

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

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

我的数据点的 LogLogPlot

带有数据点的文本文件

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

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

4

2 回答 2

1

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

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

在此处输入图像描述

修改后的答案

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

显示错误界限是嘈杂数据的另一种选择,但选项取决于您在数据集中必须使用的内容。如果您想追求这一点,请提出一个单独的问题。

在此处输入图像描述 在此处输入图像描述

于 2021-07-23T16:18:15.623 回答
0

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

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($1)):($2-512) with points pt 7 lt 1 notitle , \
     'A_1D_l0.25_L1024_r0.dat' using 1:($2-512) with lines lt 1 notitle

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

在此处输入图像描述

于 2021-07-30T11:44:41.653 回答