4

我意识到这个问题之前已经被问过(Python Pyplot Bar Plot bar 在使用对数刻度时消失),但给出的答案对我不起作用。我设置了我的 pyplot.bar(x_values, y_values, etc, log = True) 但收到一条错误消息:

"TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'"

我一直在徒劳地寻找 pyplot 代码的实际示例,该示例使用条形图并将 y 轴设置为记录但没有找到。我究竟做错了什么?

这是代码:

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,我也会收到错误消息。在此先感谢您的帮助

4

3 回答 3

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()

这是情节 在此处输入图像描述

于 2013-08-02T18:51:24.293 回答
4

正如对 Greg 的回答的评论中已经建议的那样,您确实看到了matplotlib 1.3 中通过将默认行为设置为“clip”来修复的问题。升级到 1.3 为我解决了这个问题。

请注意,您如何应用对数刻度似乎并不重要,无论是作为关键字参数bar还是通过set_yscale轴。

另请参阅建议此解决方法的“python 中的对数 y 轴箱”的答案:

plt.yscale('log', nonposy='clip')
于 2014-05-30T19:45:31.583 回答
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)需要添加适当的标签以明确它是日志值。

于 2013-08-03T07:22:27.377 回答