반응형
matplotlib.pyplot의 기본적인 canvas 그리기와 스타일링 예제¶
본 튜토리얼은 matplotlib의 가장 기본적인 튜토리얼을 제공합니다.
다양한 옵션값과 스타일 기본 설정법을 배울 수 있습니다.
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import warnings
warnings.filterwarnings('ignore')
# Unicode warning 제거 (폰트 관련 경고메시지)
plt.rcParams['axes.unicode_minus']=False
# 한글 폰트 설정
plt.rcParams['font.family'] = "NanumGothic"
# 그래프 출력 사이즈 설정
plt.rcParams["figure.figsize"] = (12, 8)
In [2]:
# 엘리스 환경에서 한글 폰트를 사용하기 위한 코드입니다.
font_dirs = ['/usr/share/fonts/truetype/nanum', ]
font_files = fm.findSystemFonts(fontpaths=font_dirs)
for font_file in font_files:
fm.fontManager.addfont(font_file)
plt.rc('font', family='NanumBarunGothic')
단일 그래프 생성¶
In [3]:
# data 생성
data = np.arange(1, 100)
# plot
plt.plot(data)
# 그래프를 보여주는 코드
plt.show()
다중 그래프 (multiple graphs)¶
1개의 canvas 안에 다중 그래프 그리기
In [4]:
data = np.arange(1, 51)
plt.plot(data)
data2 = np.arange(51, 101)
# plt.figure()
plt.plot(data2)
plt.show()
2개의 figure로 나누어서 다중 그래프 그리기
- figure()는 새로운 그래프 canvas를 생성합니다.
In [5]:
data = np.arange(100, 201)
plt.plot(data)
data2 = np.arange(200, 301)
# figure()는 새로운 그래프를 생성합니다.
plt.figure()
plt.plot(data2)
plt.show()
여러개의 plot을 그리는 방법 (subplot)¶
plt.subplot(row, column, index)
In [6]:
data = np.arange(100, 201)
plt.subplot(2, 1, 1)
plt.plot(data)
data2 = np.arange(200, 301)
plt.subplot(2, 1, 2)
plt.plot(data2)
plt.show()
위의 코드와 동일하나 , (콤마)를 제거한 상태
In [7]:
data = np.arange(100, 201)
# 콤마를 생략하고 row, column, index로 작성가능
# 211 -> row: 2, col: 1, index: 1
plt.subplot(211)
plt.plot(data)
data2 = np.arange(200, 301)
plt.subplot(212)
plt.plot(data2)
plt.show()
In [8]:
data = np.arange(100, 201)
plt.subplot(1, 3, 1)
plt.plot(data)
data2 = np.arange(200, 301)
plt.subplot(1, 3, 2)
plt.plot(data2)
data3 = np.arange(300, 401)
plt.subplot(1, 3, 3)
plt.plot(data3)
plt.show()
여러개의 plot을 그리는 방법 (subplots) - s가 더 붙습니다.¶
plt.subplots(행의 갯수, 열의 갯수)
In [9]:
data = np.arange(1, 51)
# data 생성
# 밑 그림
fig, axes = plt.subplots(2, 3)
axes[0, 0].plot(data)
axes[0, 1].plot(data * data)
axes[0, 2].plot(data ** 3)
axes[1, 0].plot(data % 10)
axes[1, 1].plot(-data)
axes[1, 2].plot(data // 20)
plt.tight_layout()
plt.show()
주요 스타일 옵션¶
In [10]:
from IPython.display import Image
# 출처: matplotlib.org
Image('https://matplotlib.org/_images/anatomy.png')
Out[10]:
타이틀¶
In [11]:
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
# 타이틀 & font 설정
plt.title('이것은 타이틀 입니다')
plt.show()
In [12]:
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
# 타이틀 & font 설정
plt.title('타이틀 fontsize를 키웁니다', fontsize=20)
plt.show()
X, Y축 Label 설정¶
In [13]:
plt.plot([1, 2, 3], [3, 6, 9])
plt.plot([1, 2, 3], [2, 4, 9])
# 타이틀 & font 설정
plt.title('Label 설정 예제입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
plt.show()
X, Y 축 Tick 설정 (rotation)¶
Tick은 X, Y축에 위치한 눈금을 말합니다.
In [14]:
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))
# 타이틀 & font 설정
plt.title('X, Y 틱을 조정합니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
plt.show()
범례(Legend) 설정¶
In [15]:
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))
# 타이틀 & font 설정
plt.title('범례 설정 예제입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)
plt.show()
X와 Y의 한계점(Limit) 설정¶
xlim(), ylim()
In [16]:
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))
# 타이틀 & font 설정
plt.title('이것은 타이틀 입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)
# x, y limit 설정
plt.xlim(0, 5)
plt.ylim(0.5, 10)
plt.show()
스타일 세부 설정 - 마커, 라인, 컬러¶
스타일 세부 설정은 마커, 선의 종류 설정, 그리고 컬러가 있으며, 문자열로 세부설정을 하게 됩니다.
marker의 종류
- '.' point marker
- ',' pixel marker
- 'o' circle marker
- 'v' triangle_down marker
- '^' triangle_up marker
- '<' triangle_left marker
- '>' triangle_right marker
- '1' tri_down marker
- '2' tri_up marker
- '3' tri_left marker
- '4' tri_right marker
- 's ' square marker
- 'p' pentagon marker
- '*' star marker
- 'h' hexagon1 marker
- 'H' hexagon2 marker
- '+' plus marker
- 'x' x marker
- 'D' diamond marker
- 'd' thin_diamond marker
- '|' vline marker
- '_' hline marker
In [17]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', markersize=5)
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', markersize=10)
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', markersize=15)
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', markersize=20)
# 타이틀 & font 설정
plt.title('마커 설정 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
plt.show()
line의 종류
- '-' solid line style
- '--' dashed line style
- '-.' dash-dot line style
- ':' dotted line style
In [18]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='o', linestyle='-')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='v', linestyle='--')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='+', linestyle='-.')
plt.plot(np.arange(10), np.arange(10)*2 - 40, marker='*', linestyle=':')
# 타이틀 & font 설정
plt.title('다양한 선의 종류 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
plt.show()
color의 종류
- 'b' blue
- 'g' green
- 'r' red
- 'c' cyan
- 'm' magenta
- 'y' yellow
- 'k' black
- 'w' white
In [19]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='-', color='b')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', linestyle='--', color='c')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', linestyle='-.', color='y')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', linestyle=':', color='r')
# 타이틀 & font 설정
plt.title('색상 설정 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
plt.show()
In [20]:
plt.plot(np.arange(10), np.arange(10)*2, color='b', alpha=0.1)
plt.plot(np.arange(10), np.arange(10)*2 - 10, color='b', alpha=0.3)
plt.plot(np.arange(10), np.arange(10)*2 - 20, color='b', alpha=0.6)
plt.plot(np.arange(10), np.arange(10)*2 - 30, color='b', alpha=1.0)
# 타이틀 & font 설정
plt.title('투명도 (alpha) 설정 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
plt.show()
그리드¶
In [21]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='-', color='b')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', linestyle='--', color='c')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', linestyle='-.', color='y')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', linestyle=':', color='r')
# 타이틀 & font 설정
plt.title('그리드 설정 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# grid 옵션 추가
plt.grid()
plt.show()
annotate 설정¶
In [22]:
plt.plot(np.arange(10), np.arange(10)*2, marker='o', linestyle='-', color='b')
plt.plot(np.arange(10), np.arange(10)*2 - 10, marker='v', linestyle='--', color='c')
plt.plot(np.arange(10), np.arange(10)*2 - 20, marker='+', linestyle='-.', color='y')
plt.plot(np.arange(10), np.arange(10)*2 - 30, marker='*', linestyle=':', color='r')
# 타이틀 & font 설정
plt.title('그리드 설정 예제', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# annotate 설정
plt.annotate('코로나 사태 발생 지점', xy=(3, -20), xytext=(3, -25), arrowprops=dict(facecolor='black', shrink=0.05))
# grid 옵션 추가
plt.grid()
plt.show()
제출¶
제출을 위해 범례(Legend) 설정에서 그렸던 그래프와 똑같은 그래프를 다시 그리세요. 따라서 아래 요소들이 반드시 추가되어 있어야 합니다.
- $y = 2x$, $y = x^2$, $y = \log(x)$ 의 3개 그래프
- 타이틀은
범례 설정 예제입니다
로 지정하고 폰트 크기는 20 X축
과Y축
으로 축 label 설정하고 폰트 크기는 20- xticks는 90도 회전하고 yticks는 30도 회전
- legend는
'10 * 2', '10 ** 2', 'log'
로 설정하고 폰트 크기는 15
In [23]:
# TODO: 범례(Legend) 설정에서 그렸던 그래프를 그리세요.
plt.plot(np.arange(10), np.arange(10)*2)
plt.plot(np.arange(10), np.arange(10)**2)
plt.plot(np.arange(10), np.log(np.arange(10)))
# 타이틀 & font 설정
plt.title('범례 설정 예제입니다', fontsize=20)
# X축 & Y축 Label 설정
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)
# X tick, Y tick 설정
plt.xticks(rotation=90)
plt.yticks(rotation=30)
# legend 설정
plt.legend(['10 * 2', '10 ** 2', 'log'], fontsize=15)
plt.show()
# 이 아래를 수정하면 제대로 채점되지 않습니다.
plt.tight_layout()
plt.savefig('result.png')
<Figure size 1200x800 with 0 Axes>
반응형
'Biusiness Insight > Data Science' 카테고리의 다른 글
[Python] Seaborn을 활용한 시각화 (0) | 2024.06.30 |
---|---|
[Python] Matplotlib을 활용한 시각화 실습 (0) | 2024.06.30 |
[Python] 데이터프레임 시각화 (0) | 2024.06.30 |
[Python] Pandas concat, merge 실습 (0) | 2024.06.30 |
[Python] Pandas concat, merge (0) | 2024.06.30 |