python中的对数y轴箱

man*_*oth 40 python logarithm matplotlib histogram

我正在尝试创建数据列的直方图并以对数方式绘制(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()
Run Code Online (Sandbox Code Playgroud)

我也试过,而不是plt.yscale('log')添加Log=trueplt.hist行,我也尝试过ax.set_yscale('log'),但似乎没有任何工作.我得到一个空图,要么y-axis是对数(代码如上所示),但没有绘制数据(没有箱子).

tac*_*ell 83

尝试

plt.yscale('log', nonposy='clip')
Run Code Online (Sandbox Code Playgroud)

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

问题是条形图的底部是y = 0,默认是log(0)在进行日志转换时屏蔽无效点(- >未定义)(有讨论改变这个,但我不记得哪个方向它去了)所以当它试图为你的条形图绘制矩形时,底边被遮盖 - >没有矩形.


小智 7

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

plt.hist(data, bins=bins, log=True)
Run Code Online (Sandbox Code Playgroud)