我正在尝试创建数据列的直方图并以对数方式(y 轴
)绘制它,但我不确定为什么以下代码不起作用:
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.hist
行中添加 Log=true
而不是 plt.yscale('log')
我也尝试了 ax.set_yscale('log')
,但似乎没有任何效果。我要么得到一个空图,要么 y-axis
确实是对数的(代码如上所示),但没有绘制数据(没有 bin)。
最佳答案
试试
plt.yscale('log', nonposy='clip')
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.yscale
问题在于条形底部位于 y=0 处,默认值是在进行对数转换时屏蔽无效点(log(0)
-> undefined)(那里正在讨论改变这一点,但我不记得它是怎么走的)所以当它试图为你的条形图绘制矩形时,底边被遮住了 -> 没有矩形。
关于python - python中的对数y轴箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17952279/