본문 바로가기

Software/Python

Python에서 화일로 저장된 데이터를 Plot하는 간단한 예제

어떤 다른 이유없이 그냥 순전히 호기심에서 시작된 프로그램 공부는 또 별로 목적이 없어서 인지 그리 잘 진행되지 않았네요. 사실 제가 Python에 처음 관심을 가진건 더~ 오래전이지만, 실제로는 [바로가기]때부터였는데요. 그때가 2013년 7월이니 저도 참~ 게으른 사람이었나봅니다.^^. 뭐 여하튼 오늘을 살짝 Python에서 그래프그리는 예제를 보일까 하는데요. 간편히 화일로 저장되어 있는 데이터를 읽어서 그래프로 그리는 일을 해보도록 하겠습니다.^^.



먼저 화일은 위와 같이 탭문자로 구분된 숫자들이 저장된 txt 화일입니다.


plotData.txt


필요하신분이 있을지 의문이지만 필요하시면 위 화일을 받으시면 됩니다. 이제 이렇게 저장된 화일을 열어서 탭으로 구분된 데이터를 각각의 변수에 저장하고 이를 다시 그래프로 표현하는 것이지요^^


import re
import numpy as np
import matplotlib.pyplot as plt

t = []
y1 = []
y2 = []
y3 = []
y4 = []

data = open('plotData.txt')

for eachLine in data:
	readTmp = data.readline()
	tmp = [float(tmpLine) for tmpLine in re.split('\t', readTmp)]

	t.append(tmp[0])
	y1.append(tmp[1])
	y2.append(tmp[2])
	y3.append(tmp[3])
	y4.append(tmp[4])

data.close()

plt.plot(t, [i*180/np.pi for i in y1],
	t, [i*180/np.pi for i in y2],
	t, [i*180/np.pi for i in y3],
	t, [i*180/np.pi for i in y4])
plt.grid(True)
plt.xlabel('time')
plt.legend(('sin', 'cos', 'sin+cos', 'sin*cos'))
plt.axis([0, 10, -120, 120])
plt.show()


앗~~ 어려워 보이지 않죠?? ㅎㅎ. 일단, 11번행에서 open 명령을 통해 해당 화일을 열게 됩니다. 그리고, 13번 부터 21번이 화일의 내용을 해당 변수에 저장하게 되는데요. data의 각 행별로 for문 안의 코드가 동작을 합니다. 그리고 15번 행이 regular expression(re)을 통해서 각  탭으로 구분된 데이터를 각각의 숫자로 변환합니다. 사실 이 re는 저는 원래는 잘 모르는 기능이었는데요. [바로가기]에서 void라는 분께서 댓글로 알려주셨더랬지요. ㅎㅎ. 그후 꽤 유용하게 잘 쓰고 있답니다. 다시한번 감사의 꾸벅~~~~

그리고, 각 데이터를 그리는 부분이 plot인데요. 거기도 []로 묶어서 i*180/np.pi for i in v]이렇게 되어 있는것은 받은 데이터를 단지 그래프로 볼때만 스케일을 바꾼다던지 하기 위해서 입니다. 그런 거 안하면 그냥 (t, y1)이렇게 해도 되죠...^^. 아 그리고 t.append() 요런건 t 뒤에 다시 데이터를 추가하는 것을 의미합니다. 그리고 나면 그 그래프의 결과는 



요렇게 잘 나오네요~~~ 뭐 크게 중요하거나 어려운 내용은 없습니다만~~~ 그냥 간편히 그림 그리는게 필요하신 분들께는 살짝 도움이 되었으면 좋겠네요.. ㅎㅎ^^


반응형