이동식 저장소

matplotlib 본문

Secondary/Python

matplotlib

해스끼 2020. 1. 12. 21:10

matplotlib는 데이터를 시각화하여 보여주는 Python 라이브러리입니다. 다양한 형태의 그래프를 지원하며, Pandas와도 연동되기 때문에 알아두면 좋겠죠?

pip install matplotlib

matplotlib는 pyplot이라는 객체에 데이터를 쌓은 후, 그래프로 flush하는 방법으로 데이터를 보여줍니다. 이 글에서는 pyplot 대신 plt라는 축약어를 사용하도록 하겠습니다.

import import matplotlib.pyplot as plt

 

선형 그래프 그려보기

가장 간단한 이차함수인 y=x^2를 그려 봅시다.

x = range(100)
y = [val**2 for val in x]
plt.plot(x, y)
plt.show()

x는 1부터 100까지의 정수, y는 그러한 정수의 제곱입니다. plot() 메소드를 이용해 데이터를 쌓고, show() 메소드로 flush합니다. 실행해 볼까요?

와! 그래프!

이렇게 그래프가 그려집니다. 매끄럽게 잘 그려졌죠?

 

numpy를 이용하여 여러 가지 함수를 그려볼 수도 있습니다.

x = range(100)
y = [np.sin(num) for num in x]
plt.plot(x, y)
plt.show()

...?

그래프가 그려지긴 했는데 너무 뾰족하네요. 이럴 때는 x를 촘촘하게 하면 됩니다.

x = np.arange(0, 100, 0.2)

참 쉽죠?

 

 

그래프 여러 개 넣기

plt의 화면은 사실 figure라는 객체입니다. figure 객체를 조작하여 화면 구성을 바꿀 수 있는데요, 여기서는 화면을 나누어 여러 개의 그래프를 넣어 보도록 하겠습니다.

 

일단 figure 객체를 얻고, 화면 크기를 키워 봅시다. 그래프 여러 개가 들어가야 하니까요.

fig = plt.figure()
fig.set_size_inches(10, 5)  # set size

너비 10인치, 높이 5인치짜리 화면을 만들었습니다. 이제 화면을 나눠 봅시다.

ax_1 = fig.add_subplot(1, 2, 1)
ax_2 = fig.add_subplot(1, 2, 2)

 

add_subplot()의 처음 두 매개변수는 화면을 몇 개로 나눌지 지정합니다. 위에서는 세로 1칸, 가로 2칸으로 나눴습니다. 마지막 매개변수는 그렇게 나눈 화면의 번호입니다. 나눠진 화면에 각각 그래프를 그리기 위해 화면 객체를 얻는 거죠. 

 

이제 그래프를 그립시다.

x = np.arange(0, 100, 0.2)
ax_1.plot(x, [np.sin(num) for num in x])
ax_2.plot(x, [np.cos(num) for num in x])

plt.show()

 

 

그래프 꾸미기

그래프를 보기 좋게 꾸며 봅시다. 

 

1) 선 색깔 지정

그래프 선의 색을 지정할 수 있습니다. 'r', 'b' 등 미리 정의된 색을 사용할 수도 있고, #FFFFFF와 같이 hex code를 사용할 수도 있습니다. 자세한 내용은 matplotlib 공식 사이트를 참고하세요.

 

2) 선 스타일 지정

위에서는 실선을 사용하여 그래프를 그렸습니다. linestyle을 지정하여 점선, 점 등으로 그래프를 그릴 수 있습니다. 자세한 내용은 matplotlib 공식 사이트를 참고하세요.

 

3) 그래프 타이틀 설정

타이틀을 지정할 수 있습니다. 설명 끝!

 

4) 범례 표시

범례를 표시하고, 좌상단, 우하단 등으로 위치를 지정할 수 있습니다.

 

그 밖에도 여러 가지 방법으로 그래프를 꾸밀 수 있습니다. 자세한 건 matplot..이 아니고 검색을 활용합시다. 

ax_1.plot(x, [np.sin(num) for num in x], c='r', label='line 1')  # set color
ax_2.plot(x, [np.cos(num) for num in x], linestyle='dashed', label='line 2')  # set line style

plt.title('test')  # set title
plt.legend(shadow=True, fancybox=True, loc="lower right")  # set legend(see pdf)
plt.show()

 

 

여러 가지 그래프

matplotlib는 여러 모양의 그래프를 지원합니다. 여기 나오는 코드를 외울 필요는 없습니다. 이름만 잘 알아뒀다가 필요할 때 검색해서 찾아 씁시다. 이름을 클릭하면 공식 레퍼런스 사이트로 이동합니다.

 

1) 선형 (plot)

일반적인 그래프입니다. 우리가 지금까지 봤던 그래프는 전부 선형 그래프입니다.

 

2) 산포도 (scatter)

자료의 분포를 보여주는 그래프입니다.

data_1 = np.random.rand(512, 2)
data_2 = np.random.rand(512, 2)

plt.scatter(data_1[:, 0], data_1[:, 1], c='b', marker='x')
plt.scatter(data_2[:, 0], data_2[:, 1], c='r', marker='^')

plt.show()

marker는 점을 어느 모양으로 찍을 지 결정합니다. data1은 x로, data2는 삼각형 모양으로 점이 찍히게 됩니다. 

 

 

3) 막대그래프 (bar chart)

막대를 그립니다.

data = [[5, 25, 50, 20],
        [4, 23, 52, 21],
        [34, 54, 9, 56]]

x = np.arange(4)
plt.bar(x, data[0], color='b', width=0.25)
plt.bar(x+0.25, data[1], color='g', width=0.25)  # move x by width
plt.bar(x+0.5, data[2], color='r', width=0.25)
plt.xticks(x+0.25, ('A', 'B', 'C', 'D'))

plt.show()

 

 

4) 히스토그램

자료의 빈도를 보여줍니다.

x = np.random.randn(1000)
plt.hist(x, bins=100) # bins를 바꿔서 실행해 보세요.
plt.show()

 

 

5) 상자 그림 (boxplot)

다양한 통계치를 한 번에 보여주는 그림입니다. 기초통계 시간에 배웠는데.. 중앙값, 25%-75% 범위, outlier밖에 기억이 안 나네요.

data = np.random.randn(100, 5)
plt.boxplot(data)
plt.show()

v 표시 한 값이 outlier입니다. 


지금까지 Python의 시각화 도구 matplotlib에 대해 알아봤습니다. 라이브러리가 다 그렇듯이 모든 내용을 알 필요는 없으며, 필요할 때마다 찾아서 쓰시면 좋습니다.

 

다음 글에서는 데이터에 대한 여러 가지 이슈와 대응 방법에 대해 알아보도록 하겠습니다.

 

'Secondary > Python' 카테고리의 다른 글

static method, class method, abstract method  (0) 2023.03.01
Data Cleansing  (0) 2020.01.15
Pandas (2)  (0) 2020.01.10
Pandas (1)  (0) 2020.01.09
Numpy - Numerical Python  (0) 2020.01.05
Comments