7

Wes McKinney の本を読んでいて、pandas を紹介するセクションで、pandas データ フレームをプロットする簡単な例を示しています。ここに私が書いた行があります:

tz_counts = frame['tz'].value_counts() # frame is a Data Frame
tz_counts[:10] # works fine till here. I can see the key-value I wanted
tz_counts[:10].plot(kind='barh', rot=0)

画面に次の行を出力するだけです

<matplotlib.axes.AxesSubplot object at 0x3d14ed0>

matplotlib のプロット関数で期待するようにプロット ウィンドウを表示するのではなく。ここで何が問題なのですか?どうすればそれを機能させることができますか?

4

2 に答える 2

14

Matplotlib は、「インタラクティブ」モードでない限り、指示するまでプロットを表示しません。

簡単な回答: プロットを表示する準備ができたら呼び出しplt.show()ます。

これにより、使用しているバックエンドの gui メインループが開始されるため、ブロックされます。(つまり、ウィンドウを閉じるまで実行が停止します)

実行を停止せずに自動的に表示したい場合は、 または を使用して対話モードをオンにできますplt.ion()ipython --pylab


ただし、--pylabipython でモードを使用すると、numpy、matplotlib.pyplot、およびその他のいくつかのすべてがグローバル名前空間にインポートされます。これはインタラクティブな使用には便利ですが、非常に悪い習慣を教えてしまい、標準ライブラリ ( 、 など) の関数を上書きしminますmax

グローバルインポートを回避するために「pylab」モードを使用せずに、ipythonでmatplotlibのインタラクティブモードを引き続き使用できます。電話するだけplt.ion()

Matplotlib のデフォルトのTkAggバックエンドは、(だけでなく) 任意の python シェルでインタラクティブ モードで動作しますipython。ただし、他のバックエンドは、GUI メインループが別のスレッドで実行されない限り、それ以上の実行をブロックすることを避けることができません。ipython別のバックエンドを使用している場合は、オプションでこれを伝える必要があり--gui=<backend>ます。

于 2013-09-18T20:20:15.463 に答える
1

使用してみてください:

%matplotlib 
tz_counts = frame['tz'].value_counts()
tz_counts[:10].plot(kind='barh', rot=0)

% matplotlib を使用すると、pylab および numpy からの * のインポートが防止され、変数のクロバリングが防止されます。

于 2016-12-19T07:04:24.893 に答える