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 중국어 웹사이트의 기타 관련 기사를 참조하세요!