Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的对数y轴容器_Python_Matplotlib_Histogram_Logarithm - Fatal编程技术网

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)
代替。相关问题可能重复,不同的解决方案