>백엔드 개발 >파이썬 튜토리얼 >While 루프 내에서 Matplotlib 실시간 플롯이 업데이트되지 않는 이유는 무엇입니까?

While 루프 내에서 Matplotlib 실시간 플롯이 업데이트되지 않는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-04 19:23:15251검색

Why Doesn't My Matplotlib Real-Time Plot Update Inside a While Loop?

While 루프의 실시간 플로팅: 문제 해결 가이드

실시간 플롯을 생성하려고 할 때 이유를 이해하는 것이 중요합니다. while 루프 중에 플롯 업데이트가 예상대로 발생하지 않을 수 있습니다. 이 특정 사례에서는 OpenCV의 카메라에서 검색된 데이터를 시각화하기 위해 matplotlib를 사용하여 실시간 플로팅을 구현할 때 문제가 발생합니다.

문제를 격리하기 위해 단순화된 예제 코드가 제시되었습니다.

fig = plt.figure()
plt.axis([0, 1000, 0, 1])

i = 0
x = list()
y = list()

while i < 1000:
    temp_y = np.random.random()
    x.append(i)
    y.append(temp_y)
    plt.scatter(i, temp_y)
    i += 1
    plt.show()

개별적으로 1000개의 포인트가 표시될 것으로 기대하는 경우 코드는 놀랍게도 첫 번째 포인트만 표시한 다음 나머지 포인트를 채우기 전에 루프가 완료될 때까지 기다립니다. 그래프. 이 동작은 matplotlib의 기본 동작이 전체 그래프를 그리기 위해 프로그램이 끝날 때까지 기다리는 것이기 때문에 발생합니다.

이 제한을 극복하고 실시간 플로팅을 달성하려면 코드 조각을 다음과 같이 수정해야 합니다.

import numpy as np
import matplotlib.pyplot as plt

plt.axis([0, 10, 0, 1])

for i in range(10):
    y = np.random.random()
    plt.scatter(i, y)
    plt.pause(0.05)

plt.show()

여기서 중요한 차이점은 plt.pause(0.05)가 포함되어 있다는 것입니다. 이 기능은 프로그램 실행을 0.05초 동안 일시 중지하여 데이터 포인트가 플롯되고 GUI의 이벤트 루프가 실행되도록 합니다(마우스 상호 작용 가능).

이 수정을 통해 플롯은 다음에서 업데이트됩니다. 데이터세트에 추가되는 각 포인트를 실시간으로 보여줍니다.

위 내용은 While 루프 내에서 Matplotlib 실시간 플롯이 업데이트되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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