在gnuplot中以对数标度的直方图

时间:2011-10-27 18:41:29

标签: gnuplot histogram logarithm bins

我必须使用gnuplot在两个轴上绘制对数刻度的直方图。我需要垃圾桶在log10中等间距。在y轴上使用对数刻度不是问题。主要问题是在x轴上创建bin。例如,在log10中使用10个bin,第一个bin将是[1],[2],[3] .... [10 - 19] [20 - 29] ..... [100 190]等等。我在网上搜索过但我找不到任何实际的解决方案。如果在gnuplot中实现它太复杂了你能建议其他软件/语言来做吗?

有人问我会更具体地解释我需要做什么。我有一个(巨大的)列表:

1   14000000
2   7000000
3   6500000
.
.
.
.
6600    1
8900    1
15000   1
19000   1

它显示,例如,14百万个IP地址已发送1个数据包,7个数百万个2个数据包.... 1个IP地址已发送6600个数据包,...,1个IP地址已发送19000个数据包。正如您所看到的,两个轴上的值都非常高,因此我无法在没有对数刻度的情况下绘制它。

我尝试的第一件事是因为我需要快速完成它,因为它是使用框在两个轴上使用gnuplot设置logscale来绘制这个列表。结果是可以理解的,但不太合适。实际上,x轴上的盒子变得越来越薄,因为很明显,10-100中的点数比1-10中的多!所以在第二个十年之后它变得非常混乱。

3 个答案:

答案 0 :(得分:5)

我尝试绘制直方图,其中两个轴都是对数缩放,而gnuplot是通过错误

Log scale on X is incompatible with histogram plots

因此看起来gnuplot不支持x轴上的对数刻度直方图。

答案 1 :(得分:4)

与GnuPlot中的其他帖子相反,在GnuPlot中以log-log比例绘制是完全可行的。

可以使用命令set logscale在GnuPlot中设置日志对数比例。 然后,假设我们在x轴和y轴上都有一个正(严格非零)值的文件。例如,以下文件是有效文件:

1 0.5
2 0.2
3 0.15
4 0.05

设置日志对数比例后,可以使用以下命令绘制文件: plot "file.txt" w p当然file.txt是文件的名称。此命令将生成带点的输出。

另请注意,绘图框很棘手,可能不建议使用。首先必须使用set xrange [1:4]形式的命令限制x范围,然后才能用框绘制。否则,当未定义x范围时,将返回错误。我假设在这种情况下,绘图需要(对于适当的x值)某些框具有大小log(0),这当然是未定义的,因此返回错误。

希望它很清楚,也会帮助别人。

答案 2 :(得分:-1)

您是否使用Matplotlib尝试了Python? Matplotlib是一个非常好的绘图库,当使用Python的简单语法时,你可以很容易地绘制事物:

import matplotlib.pyplot as plot

figure = plot.figure()
axis = figure.add_subplot(1 ,1, 1)
axis.set_yscale('log')

# Rest of plotting code