티스토리 뷰
앞선 포스팅에서 기본적인 pyplot 를 활용한 그래프 틀을 만들었다.
이번 포스팅에서는 핵심이 되는 동적으로 데이터를 업데이트하며 그래프를 다시 그리는 내용을 다루겠다.
먼저 앞선 Serial 통신 포스팅에서 데이터를 불러오는 예제를 들었지만, 장비가 없어서 본 예제에서는 file로 동일한
환경으로 구현하였다.
file에서 한 byte 씩 불러와서 구분자까지 로드하여 일정 문자열을 추출한다.
buffer = ""
while True:
oneByte = f.read(1)
if oneByte == b"\r": # method should returns bytes
break
else:
buffer += oneByte.decode()
res = buffer
res = res.replace("$","").replace("A", "")
value = res.split(',')
이번 예제에서는 캐리지 리턴('\r') 을 구분자로 하였다.
이어 불필요 키워드를 제거한다.
이렇게 생성된 value에서 chart_update 함수 호출 이전에 xdata, y0data, y1data 를 생성한다.
if len(xdata) == data_size -2 :# data_size 이하 처리
xdata.pop(0)
y0data.pop(0)
y1data.pop(0)
xdata.append(x)
y0data.append(value[0])
y1data.append(value[1])
sValue = 0 if value[2]=="" else value[2]
chart_update(sValue, xdata, y0data, y1data)
time.sleep(0.5)
x += 1
이 코드는 그래프에서 최대로 보여줄 데이터 개수(data_size) 에 맞게 X 축 데이터를 연속적으로 보여줄 수 있도록
큐의 데이터형태를 유지하도로 하는 코드이다.
예를 들어 data_size가 10이라고 가정했을 때
10번째 - xdata = [1,2,3,4,5,6,7,8,9,10]
11번째 - xdata = [2,3,4,5,6,7,8,9,10,11]
처럼 되도록 첫번째 Top 위치(0)에 있는 데이터를 pop 하고, 마지막 (9)에 +1 한 데이터를 append 한다.
y0data, y1data, sValue는 각각 앞에서 추출한 value로부터 값을 할당한다.
마지막 chart_update() 함수를 보자
def chart_update(sValue, xdata, y0data, y1data):
SwitchText = "Switch On" if sValue == 1 else "Switch Off"
plt.suptitle('DashBoard : ' + SwitchText, fontweight='bold', color="blue" if sValue == 1 else "red")
lines0.set_xdata(xdata)
lines0.set_ydata(y0data)
lines1.set_xdata(xdata)
lines1.set_ydata(y1data)
ax[0].relim()
ax[0].autoscale_view()
ax[1].relim()
ax[1].autoscale_view()
figure.canvas.draw()
figure.canvas.flush_events()
1. 전체 그래프의 제목영역에 텍스트를 sValue 값에 따라 Switch On/Off 출력 / 각 상태에 따라 글자색 blue/red로 변경
2. lines0, lines1에 해당하는 각각의 데이터를 y0 데이터, y1 데이터를 적용 업데이트 한다.
3. relim() # limit를 초기화
4. autoscale() # 스케일 재설정
5. GUI events 업데이트 : fig.canvas.draw() / fig.canvas.flush_events()
적용하면 아래와 같이 실시간으로 원하는 데이터를 업데이트 가능하다.
'개발 > 파이썬(PYTHON)' 카테고리의 다른 글
[PYTHON] 네이버 쇼핑 상품 목록 가져오기 (1/2) (6) | 2021.12.03 |
---|---|
Python 자료 구조 정리 (list, dictionary, tuple, set) (0) | 2021.10.29 |
[Python] matplotlib.pyplot 활용한 그래프 동적 업데이트 (1/2) (0) | 2021.01.03 |
[PYTHON] Serial Port 통신 (1) | 2020.12.14 |
[PYTHON] 네이버 주식정보 가져오기 (4/4) - email 보내기 (0) | 2020.12.13 |
- Total
- Today
- Yesterday
- 네이버 주식
- 평형정보
- matplotlib
- Excel
- 매물
- beautifulsoup
- 부동산
- 크몽
- DICTIONARY
- 상가
- pandas
- pyplot
- PYTHON
- Export
- 경제적 자유
- 네이버 부동산
- eum.go.kr
- 네이버
- 경매
- 크롤링
- cortarNo
- 오피스텔
- 전국
- 단지정보
- 파이썬
- 대항력있는 임차인
- 네이버쇼핑
- REST API
- json
- tkinter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |