0

単純な対数棒グラフを作成しようとしています:

import matplotlib.pyplot as plt
plt.bar(range(10), [4**i for i in range(10)], log=True)
plt.show()

次のようにクラッシュします。

  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\pyplot.py", line 2383, in bar


 ret = ax.bar(left, height, width=width, bottom=bottom, **kwargs)
  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\axes.py", line 4903, in bar
    self.add_patch(r)
  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\axes.py", line 1572, in add_patch
    self._update_patch_limits(p)
  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\axes.py", line 1590, in _update_patch_limits
    xys = patch.get_patch_transform().transform(vertices)
  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\patches.py", line 582, in get_patch_transform
    self._update_patch_transform()
  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\patches.py", line 578, in _update_patch_transform
    bbox = transforms.Bbox.from_bounds(x, y, width, height)
  File "C:\Program Files (x86)\Python33\lib\site-packages\matplotlib\transforms.py", line 786, in from_bounds
    return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

log=False を使用すると、機能します。plt.yscale('log') を試してみましたが、バーが消えました。このような単純なケースでログパラメータを間違って使用する方法がわかりません。

4

1 に答える 1

4

これは、お使いのバージョンの matplotlib のバグのようです。bottomのパラメーターのデフォルトはでplt.barあると主張されていますが0、追加のキーワード引数セットbottom=Noneを追加すると、後で演算を使用bottomして失敗します。

回避策として、bottom自分自身をデフォルト値に再度設定できます。

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
plt.bar(x, 4**x, bottom=0, log=True)
plt.show()
于 2013-09-27T09:27:42.737 に答える