我意识到之前已经问过这个问题(Python Pyplot Bar Plot bars disappear when using log scale),但给出的答案对我不起作用。我设置了我的pyplot.bar(x_values,y_values等,log = True),但收到的错误是:
"TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'"
我一直在寻找一个pyplot代码的实际例子,该代码使用条形图,y轴设置为log但未找到它。我做错了什么?
这是代码:
import matplotlib.pyplot as pyplot
ax = fig.add_subplot(111)
fig = pyplot.figure()
x_axis = [0, 1, 2, 3, 4, 5]
y_axis = [334, 350, 385, 40000.0, 167000.0, 1590000.0]
ax.bar(x_axis, y_axis, log = 1)
pyplot.show()
即使我删除pyplot.show,我也会收到错误消息。在此先感谢您的帮助
答案 0 :(得分:7)
你确定你的所有代码都是吗?代码在哪里抛出错误?在策划期间?因为这对我有用:
In [16]: import numpy as np
In [17]: x = np.arange(1,8, 1)
In [18]: y = np.exp(x)
In [20]: import matplotlib.pyplot as plt
In [21]: fig = plt.figure()
In [22]: ax = fig.add_subplot(111)
In [24]: ax.bar(x, y, log=1)
Out[24]:
[<matplotlib.patches.Rectangle object at 0x3cb1550>,
<matplotlib.patches.Rectangle object at 0x40598d0>,
<matplotlib.patches.Rectangle object at 0x4059d10>,
<matplotlib.patches.Rectangle object at 0x40681d0>,
<matplotlib.patches.Rectangle object at 0x4068650>,
<matplotlib.patches.Rectangle object at 0x4068ad0>,
<matplotlib.patches.Rectangle object at 0x4068f50>]
In [25]: plt.show()
这是情节
答案 1 :(得分:4)
正如Greg回答的评论中已经提到的那样,您确实通过将默认行为设置为“剪辑”来查看问题fixed in matplotlib 1.3。升级到1.3为我解决了这个问题。
请注意,无论您如何应用日志比例,无论是bar
的关键字参数还是轴上的set_yscale
,都无关紧要。
另请参阅this answer to "Logarithmic y-axis bins in python"建议此解决方法:
plt.yscale('log', nonposy='clip')
答案 2 :(得分:1)
由于log = True
中的ax.bar(...
语句而引发错误。我不确定这是一个matplotlib错误还是以非预期的方式使用它。可以通过删除有问题的参数log=True
轻松修复。
这可以通过简单地自己记录y值来解决。
x_values = np.arange(1,8, 1)
y_values = np.exp(x_values)
log_y_values = np.log(y_values)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(x_values,log_y_values) #Insert log=True argument to reproduce error
需要添加适当的标签log(y)
以明确它是日志值。