ホームページ  >  記事  >  バックエンド開発  >  Matplotlib でノンブロッキング プロットを実現するにはどうすればよいですか?

Matplotlib でノンブロッキング プロットを実現するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 14:17:30784ブラウズ

How to Achieve Non-Blocking Plotting with Matplotlib?

Matplotlib を使用したノンブロッキング プロットのトラブルシューティング

Matplotlib のブロック的な性質により、リアルタイム データの視覚化が妨げられる可能性があります。この記事では、元の問い合わせで提供された例を使用して、この問題を解決する解決策を検討します。

問題: Qt4Agg バックエンドの問題

元のコードは Qt4Agg をバックエンドとして利用しており、この問題に直面していることが知られています。ノンブロッキング実行の制限。 Qt4Agg はこの機能をサポートしていないため、show(block=False) を使用するとウィンドウがフリーズする可能性があります。

解決策: インタラクティブ モードと一時停止

matplotlib でノンブロッキング プロットを実現するには、次の 2 つを実行します。重要な手順は次のとおりです。

  1. plt.ion() を使用して対話モードを有効にします。これにより、コードの実行を継続しながら matplotlib が GUI イベントに応答できるようになります。
  2. Call plt.pause( time) (例: 提供されたソリューションの plt.pause(0.001)) を使用して、GUI にプロットの再描画などのイベントを処理する時間を与えます。

更新されたコード

これらのソリューションを組み込んだ更新されたコードは次のとおりです。

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

def main():
    plt.axis([-50,50,0,10000])
    plt.ion()
    plt.show()

    x = np.arange(-50, 51)
    for pow in range(1,5):   # plot x^1, x^2, ..., x^4
        y = [Xi**pow for Xi in x]
        plt.plot(x, y)
        plt.draw()
        plt.pause(0.001)
        input("Press [enter] to continue.")

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

このコードにより、既存のプロットをノンブロッキングで更新できるようになり、シームレスで応答性の高い視覚化エクスペリエンスが提供されます。

以上がMatplotlib でノンブロッキング プロットを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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