뭔가를 새롭게 배우고 익힌다는 것은 참 즐거운 일입니다. (비록 그게 아직 당장은 뭐 어디 쓸데는 없지만^^) 아무튼 뭐 그렇다는 거죠ㅠㅠ. 한참 응답하라1988에 푹 빠져있으면서, 또 주말에 출근해서 일도 하고... 그러면서... 또 뭔가 뜻대로 되는 것도 없는 이 묘한 교착상태가 아~주 답답하면서도 그런것들 속에서 살짝 이렇게 뭔가 즐겁게 배우고 익힐 수 있다는 것이 참 다행입니다.^^. 오늘은 요즘 Python 놀이 중에 발견한 재미있는 plot 스타일을 소개할려구요^^ XKCD 스타일 Sketch인데요. [바로가기]에 가보시면 예제 코드와 결과를 보실 수 있습니다.
import matplotlib.pyplot as plt import numpy as np with plt.xkcd(): # Based on "Stove Ownership" from XKCD by Randall Monroe # http://xkcd.com/418/ fig = plt.figure() ax = fig.add_axes((0.1, 0.2, 0.8, 0.7)) ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') plt.xticks([]) plt.yticks([]) ax.set_ylim([-30, 10]) data = np.ones(100) data[70:] -= np.arange(30) plt.annotate( 'THE DAY I REALIZED\nI COULD COOK BACON\nWHENEVER I WANTED', xy=(70, 1), arrowprops=dict(arrowstyle='->'), xytext=(15, -10)) plt.plot(data) plt.xlabel('time') plt.ylabel('my overall health') fig.text( 0.5, 0.05, '"Stove Ownership" from xkcd by Randall Monroe', ha='center') # Based on "The Data So Far" from XKCD by Randall Monroe # http://xkcd.com/373/ fig = plt.figure() ax = fig.add_axes((0.1, 0.2, 0.8, 0.7)) ax.bar([-0.125, 1.0 - 0.125], [0, 100], 0.25) ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') ax.xaxis.set_ticks_position('bottom') ax.set_xticks([0, 1]) ax.set_xlim([-0.5, 1.5]) ax.set_ylim([0, 110]) ax.set_xticklabels(['CONFIRMED BY\nEXPERIMENT', 'REFUTED BY\nEXPERIMENT']) plt.yticks([]) plt.title("CLAIMS OF SUPERNATURAL POWERS") fig.text( 0.5, 0.05, '"The Data So Far" from xkcd by Randall Monroe', ha='center') plt.show()
사실 저 예제를 꼭 가져올 필요는 없었지만.. 그래도 그냥 가지고 블로그에 올립니다.ㅠㅠ. 아무튼 저걸 실행하면....
이런 결과가 나타납니다. 재미있죠.. annotate를 사용해서 뭔가 있어보이는 뭔가를 보여주네요^^
이런 결과를 보면 회사 업무용으로 분위기 전환겸 사용해도 괜찮지 않을까 생각할 정도인데요^^ 아주 예전에 Python에서 그래프를 그리는 예제로 헀던 것중 하나를 XKCD 스타일로 바꿔보죠... 그때 예제로 [바로가기]에 가면 Python으로 간편하게 그래프를 그려보기라는 예제가 있습니다. 이 예제의 코드가...
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()
위와 같았는데요.. 거기서 plt.plot(...) 위에다가 plt.xkcd()만 넣어도 됩니다.^^
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.xkcd() 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()
위와 같이 말이죠... 그러면...
요렇게 짜잔~~~ 바뀝니다. ㅎㅎ^^ 뭐 오늘도 별거 아니지만.. 또 역시나 언제나 그렇듯 재미삼아 올리네요^^
'Software > Python' 카테고리의 다른 글
Anaconda를 이용한 Python 설치와 Spyder의 편리함 (12) | 2016.08.05 |
---|---|
Python에서 그래프를 애니메이션으로 표현하고 GIF로 저장하기 (18) | 2016.04.01 |
폼 나게 이쁜 그래프 그려보기 - Matplotlib 예제 (24) | 2016.02.10 |
Numpy에서 선언된 행렬에 c_나 r_를 이용해서 행이나 렬 쉽게 추가하기 (6) | 2016.01.15 |
Python Matplotlib의 Slider 위젯을 적용한 간편 예제 (4) | 2016.01.13 |
Python Matplotlib를 이용해서 간단하게 GUI의 슬라이더, 라디오버튼, 버튼을 구현하는 예제 (21) | 2016.01.08 |
Python에서 벡터 그리기 drawRobotics Ver0.01 (8) | 2015.12.17 |