1

matplotlib でプロットをレンダリングするためのバックエンドとして Qt4Agg (PyQt4) を使用しています。これには、非常に便利なボタン「曲線と軸のパラメーターを編集する」を備えた非常に便利なツールバーがあります。ただし、押すたびにエラーが発生します。(棒グラフでは機能するので便利ですが、折れ線グラフでは機能しないことはわかっています:P)。

原因とトレースバックは、下の図で明確に確認できます。

ここに画像の説明を入力

これは現在のバージョンのmatplotlibのバグかもしれないと思ったので、最新バージョンでこれを試しましたが、それでも同じエラーが発生します。

これは同じエラーを与える最も単純なスクリプトです (プロットは上記とは異なります) -

import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()

(構成ファイルを使用してバックエンドを構成しました/etc/matplotlibrc)

この問題を解決するのを手伝ってください。

4

1 に答える 1

1

これは確かに、matplotlib の Qt4 フォーム エディターのバグのようです。

エラーは、FormWidget.setup()メソッドのセクション内にあるようmatplotlib/backends/qt4_editor/formwidget.pyです。Windows上のmatplotlib 1.1.0(問題を再現できなかった)には、次のものが含まれています。

        elif isinstance(value, (list, tuple)):
            selindex = value.pop(0)
            field = QComboBox(self)
            if isinstance(value[0], (list, tuple)):
                keys = [ key for key, _val in value ]
                value = [ val for _key, val in value ]
            else:
                keys = value
            field.addItems(value)

Kubuntu Precise の matplotlib v1.1.1rc (問題を再現できた場所) は、上記の 2 行目を次のように置き換えます。

            selindex = list(value).pop(0)

最終的に、どちらのバージョンも正しくありません。

バージョン 1.1.0 メソッドの問題は、タプル (タプルは不変であり、 ) メソッドを処理しないことpopであり、バージョン 1.1.1rc コードの問題は、 の最初の要素valueが削除されますが、list(value)作成する一時リストからのみ削除されます。

このバグは、バージョン 1.1.1 で修正されています。このバージョンをダウンロードしてインストールしたところ、問題を再現できなくなりました。

于 2012-09-16T14:11:12.070 に答える