gnuplot中对数尺度的直方图

gnuplot中对数尺度的直方图,gnuplot,histogram,logarithm,bins,Gnuplot,Histogram,Logarithm,Bins,我必须使用gnuplot在两个轴上绘制对数比例的直方图。我需要箱子在log10中等距排列。在y轴上使用对数刻度不是问题。主要问题是在x轴上创建箱子。例如,在log10中使用10个存储箱,第一个存储箱将是[1]、[2]、[3]、[10-19][20-29]、[100 190]等等。我在网上搜索过,但找不到任何切实可行的解决办法。如果在gnuplot中实现它太复杂了,您能推荐其他软件/语言来实现吗 有人问我,我会更具体地解释我需要做什么。我有这样一个(巨大的)清单: 1 14000000 2

我必须使用gnuplot在两个轴上绘制对数比例的直方图。我需要箱子在log10中等距排列。在y轴上使用对数刻度不是问题。主要问题是在x轴上创建箱子。例如,在log10中使用10个存储箱,第一个存储箱将是[1]、[2]、[3]、[10-19][20-29]、[100 190]等等。我在网上搜索过,但找不到任何切实可行的解决办法。如果在gnuplot中实现它太复杂了,您能推荐其他软件/语言来实现吗

有人问我,我会更具体地解释我需要做什么。我有这样一个(巨大的)清单:

1   14000000
2   7000000
3   6500000
.
.
.
.
6600    1
8900    1
15000   1
19000   1
例如,它显示1400万ip地址发送了1个数据包,700万ip地址发送了2个数据包。。。。1个ip地址已发送6600个数据包,1个ip地址已发送19000个数据包。正如你所看到的,两个轴上的值都很高,所以我不能在没有对数刻度的情况下绘制它


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

我尝试绘制一个柱状图,其中两个轴都是对数标度的,而gnuplot则是通过错误来实现的

X上的对数比例与直方图不兼容

因此,gnuplot似乎不支持x轴上带有直方图的对数刻度。

您尝试过吗?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

与此线程中的其他帖子相反,在GnuPlot中以log-log-scale进行绘图是完全可行的

可以使用命令
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范围未定义时,将返回一个错误。我假设在这种情况下,plot需要(对于适当的x值)一些框具有大小日志(0),这当然是未定义的,因此返回错误


希望它是清楚的,也能帮助其他人。

Matplotlib与Python。这是一个惊人的工具。你有什么样的数据,你想用对数x轴绘制直方图?也许另一种方法更适合用!?为了更好地理解,我编辑了这个问题@Blender你确定可以用这个库来做吗?我刚刚使用了maplotlib@Blender所说的,这正是我所需要的!好的,这是一件重要的事情!这肯定不是事实。GnuPlot不支持日志图。您可以通过
set logscale
设置日志缩放,然后可以使用命令
plot“file.txt”w p
用数据打印文件。假设“file.txt”每行有两个值(x和y),并且该文件中没有x=0或y=0的行,因为这里没有定义对数。此外,使用方框进行绘图更为棘手。只有当xrange的形式为[1:m],且x在1和m之间的所有值都是给定的且非零时,它才能工作。否则,必须生成大小为0的框=>Error。请参见下面的示例解决方案。由于有一条注释,我开始使用matplotlib,它完全满足了我的需要。我还使用logspace来创建对数容器。现在我试图理解为什么hist函数的normed=True似乎不起作用。这是一个令人困惑的关键字,将在下一个主要版本的numpy(matplotlib的数字后端)中删除。文档建议使用其他方法: