** PlotItem.enableAutoScale() 사용하면, 항상 전체 그래프 영역 모두 보여줌.
-- PlotItem.enableAutoScale() 는 나중에 사라지므로, 대신에 PlotItem.enableAutoRange( ) 사용 권장함.
** setXRange( ), setYRange( ) 로 차트의 x축, y축 가시영역을 지정해도...
enableAutoRange( ) 사용하면, 자동으로 가시영역 변경된다..
** 대부분의 차트는 realtime update 시에 setData( ) 를 사용하면, 자동으로 이전차트 지우고, 새로운 data로 차트를 그린다.
--> but, BarGraphItem 차트는 clear( ) 를 사용해서, 이전 차트 item 지우고, 새로 그려야함.
# https://freeprog.tistory.com/372?category=716617
import pyqtgraph as pg
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSlot, pyqtSignal, QObject, Qt, QThread, QTimer
import time, random
class ExMain(QWidget):
def __init__(self):
super().__init__()
hbox = QHBoxLayout()
self.pw1 = pg.PlotWidget(title="line chart")
self.pw2 = pg.PlotWidget(title="이전 차트 제거 안됨")
self.pw3 = pg.PlotWidget(title="clear 로 이전 차트 제거함")
hbox.addWidget(self.pw1)
hbox.addWidget(self.pw2)
hbox.addWidget(self.pw3)
self.setLayout(hbox)
# self.setGeometry(300, 100, 800, 500) # x, y, width, height
self.setWindowTitle("pyqtgraph 예제 - realtime")
self.x = [1, 2, 3]
self.y = [4, 5, 6]
# self.pw1.setXRange(1, 10)
# self.pw1.setYRange(1, 10)
# self.pw1.enableAutoScale()
# self.pw1.enableAutoRange() # x,y축 모두 autorange..
# self.pw1.enableAutoRange(axis='x', enable=True)
# self.pw1.enableAutoRange(axis='x')
# self.pw1.enableAutoRange(axis='y')
# self.pw1.enableAutoRange(axis='xy')
# self.pw2.enableAutoRange()
self.pl = self.pw1.plot(pen='g')
self.mytimer = QTimer()
self.mytimer.start(1000) # 1초마다 차트 갱신 위함...
self.mytimer.timeout.connect(self.get_data)
self.draw_chart(self.x, self.y)
self.show()
def draw_chart(self, x, y):
self.pl.setData(x=x, y=y) # line chart 그리기
cnt = len(y)
new_y = []
for i in range(cnt):
new_y.append(random.random()*60) # 0 이상 ~ 60 미만 random 숫자 만들기
""" 이전에 그린 차트 잔상 남아있다 """
bar_chart = pg.BarGraphItem(x=x, height=new_y, width=1, brush='y', pen='r', title="잔상남음")
self.pw2.addItem(bar_chart)
""" clear() 로 이전에 그린 차트 제거함. """
self.pw3.clear() # remove all items --> 이전 그래프 제거함.
bar_chart2 = pg.BarGraphItem(x=x, height=new_y, width=1, brush='y', pen='r')
self.pw3.addItem(bar_chart2)
@pyqtSlot()
def get_data(self):
# print(time.localtime())
# print(time.strftime("%H%M%S", time.localtime()))
data: str = time.strftime("%S", time.localtime()) # 초 단위만 구함.
last_x = self.x[-1]
self.x.append(last_x + 1)
self.y.append(int(data))
self.draw_chart(self.x, self.y)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
ex = ExMain()
sys.exit(app.exec_())
'PyQtGraph 공부.' 카테고리의 다른 글
Study 6 : 최근 특정 수 만큼의 데이타만 남기고 싶을때. (0) | 2021.08.24 |
---|---|
Study 5 : 그래프 라이브러리 PyQtGraph 2D Graph 예제 코드 (0) | 2021.08.24 |
Study 4 : timeaxis 만들어, 최근 data 만 실시간 보여주기 (0) | 2021.08.24 |
Study 2 : pyqtgraph -- bar chart 그리기, 여백 제거 (0) | 2021.08.24 |
Study 1 : pyqtgraph -- pyqt5 에서 사용 -- line chartPyQt5 (0) | 2021.08.24 |