python中的对数y轴箱

时间:2013-07-30 16:18:10

标签: python matplotlib histogram logarithm

我正在尝试创建数据列的直方图并以对数方式绘制(y-axis)并且我不确定为什么以下代码不起作用:

import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('foo.bar')
fig = plt.figure()
ax = fig.add_subplot(111)
plt.hist(data, bins=(23.0, 23.5,24.0,24.5,25.0,25.5,26.0,26.5,27.0,27.5,28.0))
ax.set_xlim(23.5, 28)
ax.set_ylim(0, 30)
ax.grid(True)
plt.yscale('log')
plt.show()

我也尝试过在plt.yscale('log')行中添加Log=true代替plt.hist而我尝试ax.set_yscale('log'),但似乎没有任何效果。我要么得到一个空图,要么y-axis确实是对数的(代码如上所示),但是没有绘制数据(没有箱子)。

3 个答案:

答案 0 :(得分:71)

尝试

plt.yscale('log', nonposy='clip')

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.yscale

问题是条形图的底部是y = 0,默认是在进行日志转换时屏蔽无效点(log(0) - >未定义)(有关于更改此内容的讨论) ,但我不记得它走了哪条路)所以当它试图为你的条形图绘制矩形时,底边被掩盖了 - >没有矩形。

答案 1 :(得分:3)

np.logspace返回[1-10]中的bin,对数间隔 - 在我的情况下xx是npvector> 0所以下面的代码可以解决这个问题

logbins=np.max(xx)*(np.logspace(0, 1, num=1000) - 1)/9
hh,ee=np.histogram(xx, density=True, bins=logbins)

答案 2 :(得分:0)

hist 构造函数接受 log 参数。
你可以这样做:

plt.hist(data, bins=bins, log=True)