在 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
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的点。
我有一个大型数据集,需要在 Gnuplot 中以对数对数比例绘制,如下所示:
set log xy
plot 'A_1D_l0.25_L1024_r0.dat' u 1:(-512)
LogLogPlot of my 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的点。