ホームページ >バックエンド開発 >Python チュートリアル >Matplotlib を使用してノンブロッキングな方法でプロットする方法: `show(block=False)` が常に機能しないのはなぜですか?

Matplotlib を使用してノンブロッキングな方法でプロットする方法: `show(block=False)` が常に機能しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-03 04:02:02493ブラウズ

How to Plot in a Non-Blocking Way with Matplotlib: Why Does `show(block=False)` Not Always Work?

Matplotlib を使用したノンブロッキングな方法でのプロット: 実行の問題の解決

実行を停止せずに Matplotlib を使用して関数をプロットしようとすると、 GUI とバックエンドの相互作用に関連する問題が発生する可能性があります。よくある誤解の 1 つは、show(block=False) の使用法です。これはバックエンドによっては常に機能するとは限りません。

提供されたコードは show(block=False) の使用法を示していますが、実際には機能しているようです。 show() を呼び出す前に plt.ion() を使用しない。 plt.ion() は対話モードをアクティブにし、描画や更新の一時停止ができるノンブロッキング プロットを可能にします。

plt.ion() を有効にすると、plt.show() を呼び出してプロット ウィンドウを表示できます。 。このウィンドウは開いたままになり、ブロックされないため、実行を続行できます。ただし、更新されたプロットを表示するには、plt.draw() を使用してキャンバスを再描画し、plt.pause(timeout) を使用して実行を短期間停止する必要があります。 plt.pause() のタイムアウト パラメーターは、一時停止の長さを秒単位で決定します。

特定のケースでは、plt.plot() を呼び出すたびに新しいプロットが作成されることにも注意することが重要です。同じウィンドウ内で作成されます。代わりに既存のプロットを更新したい場合は、 plt.plot(x, y, color='r') を使用する必要があります。これにより、既存のプロットを維持しながら、新しいデータ ポイントが赤色でプロットされます。

以下は、非ブロッキング問題を解決し、既存のプロットを更新するコードの改訂版です。

<code class="python">import matplotlib.pyplot as plt
import numpy as np

def main():
    plt.ion()  # Activate interactive mode
    plt.show()  # Display the plot window

    plt.axis([-50,50,0,10000])
    x = np.arange(-50, 51)
    for pow in range(1,5):
        y = [Xi**pow for Xi in x]
        plt.plot(x, y, color='r')  # Update the plot in red color
        plt.draw()
        plt.pause(0.001)  # Pause for a brief period
        input("Press [enter] to continue.")

if __name__ == '__main__':
    main()</code>

以上がMatplotlib を使用してノンブロッキングな方法でプロットする方法: `show(block=False)` が常に機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。