我试图创建一个数据列的直方图并以对数(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.hist
行中添加Log=true
而不是plt.yscale('log')
,我也尝试过ax.set_yscale('log')
,但似乎没有任何工作。我要么得到一个空图,要么y-axis
确实是对数的(代码如上所示),但没有绘制数据(没有bin)。
4条答案
按热度按时间ltskdhd11#
尝试
http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.yscale
问题是条形图的底部位于y=0,默认情况是在进行对数转换时屏蔽无效点(
log(0)
-〉undefined)(有讨论过改变这一点,但我不记得是哪种方式),所以当它试图为您绘制条形图的矩形时,底部边缘被屏蔽-〉没有矩形。4c8rllxm2#
hist构造函数接受
log
参数。你可以这样做:
ax6ht2ek3#
logspace返回
[1-10]
中的bin,对数间隔-在我的例子中,xx是一个〉0的npvector,所以下面的代码可以实现这个目的13z8s7eq4#
tacaswell's answer是正确的,尽管
nonposy
关键字参数已经被弃用,而支持nonpositive
。此外,指向文档的链接不再有效,请参阅当前文档以获取更多信息。更新的解决方案: