>백엔드 개발 >파이썬 튜토리얼 >Matplotlib를 사용하여 비차단 방식으로 플롯하는 방법: `show(block=False)`가 항상 작동하지 않는 이유는 무엇입니까?

Matplotlib를 사용하여 비차단 방식으로 플롯하는 방법: `show(block=False)`가 항상 작동하지 않는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-03 04:02:02480검색

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

Matplotlib를 사용하여 비차단 방식으로 플로팅: 실행 문제 해결

실행을 중단하지 않고 Matplotlib를 사용하여 함수를 플로팅하려고 하면 GUI 및 백엔드 상호 작용과 관련된 어려움에 직면할 수 있습니다. 일반적인 오해 중 하나는 백엔드에 따라 항상 작동하지 않을 수 있는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.