import matplotlib.pyplot as plt
import numpy as np
data = np.arange(10)
data
plt.plot(data)
Figures and Subplots
figure을 사용하여 matplotlib 객체를 넣을 수 있습니다.
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1)
ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)
fig
add_subplot에서 해당 파라미터(n, x, y)의 의미는, n x n의 격자에서 x, y에 넣어라 라는 뜻입니다.
ax3.plot(np.random.randn(50).cumsum(), 'k--')
fig
3번째에 해당 그림을 넣습니다.
_ = ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)
ax2.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))
fig
plt.close('all')
이후 plt.close를 통해 모두 닫습니다.
fig, axes = plt.subplots(2, 3)
axes
array([[<AxesSubplot:>, <AxesSubplot:>, <AxesSubplot:>],
[<AxesSubplot:>, <AxesSubplot:>, <AxesSubplot:>]], dtype=object)
새로운 figure를 만들고, subplot obj를 반환합니다. (axes)
다른 예시로 보여드리겠습니다.
fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
for j in range(2):
axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)
plt.subplots_adjust(wspace=0, hspace=0)
코드 보시면 아마 이해되실 거예요
Colors, Markers, and Line Styles
plot 할 때, g--는 color = g, linestyle = --와 같습니다.
plt.figure()
from numpy.random import randn
plt.plot(randn(30).cumsum(), 'ko--')
이는 color = k, linestyle = --, marker = o와 같습니다.
data = np.random.randn(30).cumsum()
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
plt.legend(loc='best')
색깔은 검은색, Default는 라인 스타일이 점선, steps-post는 라인 스타일이 직선이네요
또한 drawstyle을 steps-post로 계단 형식을 넣었습니다.
Ticks, Labels, and Legends
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(np.random.randn(1000).cumsum())
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
rotation=30, fontsize='small')
fig
set_xticks는 좌표의 위치를 설정하고, labels를 통하여 이름과 회전과 글씨체를 넣습니다.
ax.set_title('My first matplotlib plot')
ax.set_xlabel('Stages')
fig
이후 타이틀과 x축에 이름을 넣습니다.
Adding legends
from numpy.random import randn
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')
하나의 fig에 다 그려 넣는 모습입니다.
하지만 legend 함수가 없어서 아직 라벨을 붙이지 않았습니다.
ax.legend(loc='best')
fig
이렇게 해야 비로소 라벨이 붙습니다. best를 넣음으로써 알아서 좋은 자리에 넣습니다.
Annotations and Drawing on a Subplot
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
fig = plt.figure()
# 새로운 figure을 생성함
ax = fig.add_subplot(1, 1, 1)
# 전체 칸을 가로 1칸, 세로 1칸으로 나눈 뒤, ax를 첫 번째 칸에 넣음
data = pd.read_csv('examples/spx.csv', index_col=0, parse_dates=True)
# csv파일을 불러옴, 이떄 0번째 column을 index로 둠, parse_dates를 True로 함으로써 날짜도 가져옴
spx = data['SPX']
# data의 spx 컬럼을 가져옴
spx.plot(ax=ax, style='k-')
# ax칸에 style은 검은색과, solid line style을 넣음
crisis_data = [
(datetime(2007, 10, 11), 'Peak of bull market'),
(datetime(2008, 3, 12), 'Bear Stearns Fails'),
(datetime(2008, 9, 14), 'Lehman Bankruptcy')
]
for date, label in crisis_data:
ax.annotate(label, xy=(date, spx.asof(date) + 75),
xytext=(date, spx.asof(date) + 225),
arrowprops=dict(facecolor='black', headwidth=4, width=2,
headlength=4),
horizontalalignment='left', verticalalignment='top')
# 주석을 닮, label과 date는 위의 crisis_data임
# xy, xytest에 date와 좌표를 줌으로써 해당 주석을 위치 시킴
# 이후 화살표의 특성을 설정함.
# 색깔은 검은색, 그리고 넓이와 길이를 정함
# horizontalalignment를 통해 좌표가 텍스트의 왼쪽에 넣고, 좌표가 텍스트 밑에 놓게 했다.
# Zoom in on 2007-2010
ax.set_xlim(['1/1/2007', '1/1/2011'])
ax.set_ylim([600, 1800])
ax.set_title('Important dates in the 2008-2009 financial crisis')
anootate() 함수는 텍스트와 화살표, 다른 모양들을 표현할 수 있습니다.
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(1, 1, 1)
rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]],
color='g', alpha=0.5)
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
세 개의 객체를 만들어서 ax에 추가한 모습입니다.
'Python Library > Matplotlib' 카테고리의 다른 글
[Matplotlib - Python] Plotting with pandas and seaborn (2) | 2022.06.16 |
---|---|
[Matplotlib - Python] Matplotlib 라이브러리와 파일 저장, 텍스트 처리, 여러 데이터 처리 (0) | 2022.02.09 |
[Matplotlib - Python] Matplotlib 라이브러리와 꺾은 선 그래프의 여러 설정들 (0) | 2022.02.09 |
[Matplotlib] Matplotlib 라이브러리 (0) | 2022.02.09 |