matplotlib을 이용한 그래프 그리기 EXTRA 01 - 3x3 격자 그리기

1 minute read

봇 코딩을 하던 중에 3x3 격자에 색을 칠한 것을 약 80개 가량 그려야 할 일이 생겼다.

ex0101

위 9개의 숫자들의 나열이 각각의 칸이 되고,

숫자마다 색깔이 지정되어 있다.

pillow라는 이미지 처리 라이브러리가 있다고는 하지만,

새롭게 뭘 설치하기는 귀찮아서 matplotlib을 그대로 사용하기로 했다.

먼저 대강의 도안을 생각해보자

3x3이므로, 1픽셀의 선과 100픽셀의 칸이면 괜찮다고 생각했다.

좌표 내용
0, 101, 202, 303
1-100, 102-201, 203-302

먼저 pyplot을 import 해주자

import matplotlib.pyplot as plt

그리고 우리가 파일을 저장할 경로를 설정해주자.

지금은 테스트용 프로그램이기 때문에 대충 만들어준다

route = './testbuff.png'

우리는 그림을 그래프 위에 그리는 것이기 때문에,

우리가 그림을 그릴 캔버스의 크기를 좌표로 제한을 둔다.

plt.xlim(0,303)
plt.ylim(0,303)

그리고 우리가 색을 채워줄 문자열을 하나 준비한다.

stri = '010121010'

아마 위의 경우에는 십(+)자 모양이 될 것이다.

이제 대강의 준비는 완료됬다.

각 칸마다 Rectangle을 이용해서 색을 채워줄건데,

그 칸의 좌표들을 list에 저장해주자

xst = [1,102,203,1,102,203,1,102,203]
yst = [203,203,203,102,102,102,1,1,1]

각 숫자별의 색생들도 list에 저장해주자

clr = ['#AAAAAA','#19FFFF','#FFFFFF']

for문에 넣을 준비는 끝났다.

for i in range(0,9):
	plt.gca().add_patch(plt.Rectangle((xst[i],yst[i]),100,100,fc=clr[int(stri[i])]))

plt.gca().add_patch()함수는 add_patch()의 괄호 안의 오브젝트(Patch)를

그래프 상에 그리는 함수이다. (공식문서 링크)

Rectangle함수 안의 인자들은 각각 시작좌표, x크기, y크기, **kwargs인데,

여기 **kwargsfc는 face color를 의미한다.

색을 채웠으니 선을 추가해주자

hehe=[0,101,202,303]
hehl=[1,0.5,0.5,1]
for h in range(0,4):
	plt.axvline(x=hehe[h], color='#000000', linewidth=hehl[h])
	plt.axhline(y=hehe[h], color='#000000', linewidth=hehl[h])

hehehehl은 그냥 이름을 막 지은거다.

for문 안에서 axvline함수와 axhline함수를 사용했는데,

각각 선을 그릴 좌표, **kwargs이다.

여기 **kwargscolor는 선의 색상, linewidth는 선의 두께이다.

코드를 보면, 시작과 끝은 1이지만 중간은 0.5로 해놨는데,

시작과 끝은 선이 반으로 갈라지지만, 중간은 그대로 나오기 때문에 그렇게 해놨다.

마지막으로, 그래프가 아닌 그림이 되게 하기 위해서 margin을 없애줘야한다.

그래프를 그리게 되면, 상하좌우에 빈 공간이 생기는데, 이는 그림을 저장할 때 불편하게 한다.

plt.axis('off')

먼저 축을 없애준 뒤,

plt.subplots_adjust(left=0,bottom=0,right=1,top=1,hspace=0,wspace=0)

margin들을 없애준다.

그리고 그림을 저장해주면 끝!

fig = plt.gcf()
fig.set_size_inches(1,1)
fig.savefig(route, dpi=303)

testbuff

잘 나왔다.

이제 나머지 친구들은 바깥에 반복문을 하나 추가해준 뒤, 프로그램을 약간 수정하면 된다.

끝!

오늘 사용한 코드

Comments