python中的对数y轴容器
我正在尝试创建一个数据列的柱状图,并以对数方式(python中的对数y轴容器,python,matplotlib,histogram,logarithm,Python,Matplotlib,Histogram,Logarithm,我正在尝试创建一个数据列的柱状图,并以对数方式(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)
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\u yscale('log')
,但似乎没有任何效果。我要么得到一个空的绘图,y轴
确实是对数的(代码如上所示),但没有绘制数据(没有箱子) 试试看
plt.yscale('log', nonposy='clip')
问题在于条形图的底部为y=0,默认情况下,在进行日志转换时(讨论过如何更改此项,但我不记得它是以哪种方式进行的),会在有效点(log(0)
->->未定义)中进行遮罩,因此当它尝试为条形图绘制矩形时,底部边缘被遮住->没有矩形。np.logspace返回[1-10]
中的容器,以对数间隔-在我的例子中,xx是npvector>0,因此下面的代码执行此操作
logbins=np.max(xx)*(np.logspace(0, 1, num=1000) - 1)/9
hh,ee=np.histogram(xx, density=True, bins=logbins)
谢谢你的回答。您提出的解决方案解决了消失的条形图,但另一个“缺陷”随后浮出水面:y对数轴的所有标签都被绘制在彼此的顶部。最后一个问题是通过注释“ax.set_ylim(0,30)”行来解决的。是的,因为限制中的0被剪裁为一个非常小的数字,所以十年的数量不合理。使用ax.set_ylim(1,30)
代替。相关问题可能重复,不同的解决方案