使用 gnuplot 根据二维数据制作一维直方图?

使用 gnuplot 根据二维数据制作一维直方图?

我有以下形式的数据:

x1 y1
x2 y2
...

其中每一个组x, y代表二维平面上的一个点。

我需要 y 方向上的点分布直方图(例如,将所有具有相似 y 值的点归类)。这将是 y 轴上的投影,然后将其转换为直方图。

我该如何使用 gnuplot 来实现这一点?

答案1

没有直接的方法来制作实际的直方图,因为这不仅仅是一个绘图任务,还要求先对数据进行排序和分箱。您可以在 gnuplot 之外执行此操作,然后使用 简单地绘制 gnuplot 的结果plot 'file' with histo

尽管如此,有两种主要方法可以在 gnuplot 中完全完成您想要的操作。

首先这是一个老把戏,它迫使 gnuplot 使用一些数学和样式来为您对数据进行分类和排序smooth freq。如果您的数据文件名为“data”,您可以执行以下操作:

w = 5
bin(x,wth) = width*floor(x/wth)
plot 'data' using (bin($2,bw)):(1.0) smooth freq with boxes

这种方法虽然有效,但具有直方图的所有缺点,主要是分布的外观取决于您选择的箱宽,您可以在第一行将其分配给“w”。

最新版本的 gnuplot (> = 4.4) 可以计算核密度估计,它就像一个独立于箱体的直方图:它为您提供连续分布。此外,它还会为您进行分箱和排序!您只需要说

plot 'data' using 2:(.001) smooth kden

如果您有 1000 个数据点,上面的 .001 将为您提供正态分布。您需要替换数据点数量的倒数(或者如果您不关心结果是否正态化,则不必担心)。

如果你安装了最新版本的 gnuplot,我建议使用后一种方法。我的关于 gnuplot 的书,刚刚发布。

相关内容