4

この質問は以前に尋ねられたことに気付きました( Python Pyplot Bar 対数スケールを使用するとプロットバーが消える)が、与えられた答えは私にとってはうまくいきませんでした。pyplot.bar(x_values, y_values, etc, log = True) を設定しましたが、次のようなエラーが発生しました:

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

y 軸がログに設定された棒グラフを使用する pyplot コードの実際の例を無駄に検索してきましたが、見つかりませんでした。私は何を間違っていますか?

コードは次のとおりです。

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

グレッグの回答へのコメントで既に示唆されているように、デフォルトの動作を「クリップ」に設定することにより、matplotlib 1.3 で修正された問題が実際に見られます。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 に答える