Matplotlib-チャートオブジェクトのplt.show()

Aug 28 2020

ここに本当に簡単な例があります。関数から返されたaxオブジェクトからプロットを作成しています:

import matplotlib.pyplot as plt

x = ['a', 'b', 'c']
y = [1, 2, 3]

def make_plot():

    fig, ax = plt.subplots()
    ax.set_title('test bar chart')

    return ax


chart = make_plot()
chart.bar(x, y)

plt.show()               #why does this show the chart?

私の質問は最後のplt.show()についてです。明らかに、これはチャートの出力を示しています。しかし、なぜ?私には、plt.show()が何かに結び付けられているようには見えません。私は自分の持っているchartすべてのパラメータとその他もろもろと私のチャートを含むオブジェクトを、。しかし、plt.show()はこれとどのように相互作用することを知っていますか?クラスインスタンスのようにchart.show()、のようなものがある方が直感的に思えchartます。

回答

2 Keon Aug 28 2020 at 01:42

良い質問!chartを呼び出すと作成される軸ですplt.subplots()。Pyplotは、いわゆる「ステートフル」APIです。plt。*関数を呼び出すと、pyplotの内部状態が変更され、将来の呼び出しに影響を与える可能性があります。を呼び出すplt.subplots()と、新しく作成されたサブプロット軸を含む新しく作成されたFigureがあることがわかります。

同様に、を呼び出すとplt.plot()、最新の軸が何であるかについてのレコードが保存され、そのプロットにデータがプロットされます。

ピプロットのソースコードを見るとmanager、現在のプロットを格納するために使用するグローバル変数がどのように含まれているかがわかりmanager、プロットを作成するときに更新されます。

さらに、がありFigure.show()ます。ピプロットを回避したい場合は、次のようになります