Tkinter용 Matplotlib에서 플롯 업데이트
Tkinter 애플리케이션 내에서 Matplotlib의 플롯을 업데이트하는 데 어려움을 겪었습니다. 사용자가 시간 단위를 조정할 수 있도록 허용하므로 새 플롯을 생성하지 않고도 플롯을 다시 계산하고 업데이트해야 합니다.
접근 방식 1: 지우기 및 다시 플롯
간단합니다. 방법은 graph1.clear() 및 graph2.clear()를 호출하여 기존 플롯을 지운 다음 데이터를 다시 그리는 것입니다. 더 간단하지만 속도도 느립니다.
접근 방식 2: 플롯 데이터 업데이트
훨씬 더 빠른 대체 접근 방식은 기존 플롯 객체의 데이터를 업데이트하는 것입니다. 이를 위해서는 코드를 약간 조정해야 합니다.
def plots(): global vlgaBuffSorted cntr() result = collections.defaultdict(list) for d in vlgaBuffSorted: result[d['event']].append(d) result_list = result.values() f = Figure() graph1 = f.add_subplot(211) graph2 = f.add_subplot(212, sharex=graph1) # Create plot objects vds_line, = graph1.plot([], [], 'bo', label='a') vgs_line, = graph1.plot([], [], 'rp', label='b') isub_line, = graph2.plot([], [], 'b-', label='c') for item in result_list: # Update plot data vds_line.set_data([], []) vgs_line.set_data([], []) isub_line.set_data([], []) tL = [] vgsL = [] vdsL = [] isubL = [] for dict in item: tL.append(dict['time']) vgsL.append(dict['vgs']) vdsL.append(dict['vds']) isubL.append(dict['isub']) # Update plot data vds_line.set_data(tL, vdsL) vgs_line.set_data(tL, vgsL) isub_line.set_data(tL, isubL) # Draw the plot f.canvas.draw() f.canvas.flush_events()
이 접근 방식에서는 플롯 객체(예: vds_line)를 생성한 다음 반복할 때마다 해당 데이터를 업데이트합니다. draw() 및 flash_events() 메소드는 Tkinter 창에 업데이트된 플롯을 표시하는 데 사용됩니다.
적절한 접근 방식을 선택하면 Tkinter 애플리케이션 내 Matplotlib의 플롯을 효과적으로 업데이트할 수 있습니다.
위 내용은 시간 척도를 변경한 후 Tkinter 애플리케이션에서 Matplotlib 플롯을 효율적으로 업데이트하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!