일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Rxjava
- activity
- Codeforces
- 프로그래머스
- Coroutine
- pandas
- MyVoca
- Gradle
- 코루틴
- relay
- androidStudio
- Kotlin
- architecture
- TEST
- textfield
- android
- 암호학
- Coroutines
- MiTweet
- 백준
- 쿠링
- livedata
- Compose
- Python
- 코드포스
- ProGuard
- boj
- Hilt
- AWS
- GitHub
- Today
- Total
이동식 저장소
matplotlib 본문
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()
지금까지 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 |