Matplotlib는 파이썬의 대표적인 데이터 시각화 라이브러리입니다. matplotlib.pyplot은 간편한 그래프 생성 인터페이스이고, Figure는 전체 그림, Axes는 실제 그래프가 그려지는 영역입니다. 아래 예제는 교육용으로 fig, ax = plt.subplots() 객체지향 방식을 주로 사용합니다.
설치:python -m pip install matplotlib numpy · Python IDLE / VS Code / Jupyter에서 실행 가능
그래프 이미지는 파이썬 Matplotlib로 실제 렌더링하여 HTML에 내장했습니다. 인터넷 없이 열 수 있습니다. 각 코드의 마지막에는 PNG 저장과 그래프 창 표시가 포함됩니다. 일부 예제는 함수 이름을 ax.method() 형태로 호출합니다. 3차원 예제는 projection='3d'를 사용합니다.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-3,3,300)
ax.plot(x,x**2,label='y=x²')
ax.plot(x,x**3/3,label='y=x³/3')
ax.legend()
fig.tight_layout()
fig.savefig("matplotlib_001.png", dpi=160)
plt.show()
print("matplotlib_001.png 저장 완료")
예상 출력matplotlib_001.png 저장 완료
실제 그래프 출력
그래프 해석: 곡선의 증가·감소와 교점을 비교합니다.
02 · 기본 그래프
scatter() 산점도
두 수치 변수 사이의 관계를 개별 점으로 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(1,21)
y=1.7*x+np.sin(x)*3
ax.scatter(x,y,c=x,cmap='viridis',s=40+2*x)
ax.set_xlabel('x');ax.set_ylabel('y')
fig.tight_layout()
fig.savefig("matplotlib_002.png", dpi=160)
plt.show()
print("matplotlib_002.png 저장 완료")
예상 출력matplotlib_002.png 저장 완료
실제 그래프 출력
그래프 해석: 점들이 오른쪽 위로 분포하면 양의 관계를 시사합니다.
03 · 기본 그래프
bar() 막대그래프
범주별 크기를 비교합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
names=['A','B','C','D'];values=[18,27,14,32]
ax.bar(names,values,color=['#4e79a7','#f28e2b','#59a14f','#e15759'])
fig.tight_layout()
fig.savefig("matplotlib_003.png", dpi=160)
plt.show()
print("matplotlib_003.png 저장 완료")
예상 출력matplotlib_003.png 저장 완료
실제 그래프 출력
그래프 해석: 막대 높이로 범주 간 차이를 비교합니다.
04 · 기본 그래프
barh() 가로 막대
긴 범주 이름과 순위를 표시하기 좋습니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
names=['Physics','Math','Chemistry','CS']
ax.barh(names,[72,91,77,88]);ax.set_xlim(0,100)
fig.tight_layout()
fig.savefig("matplotlib_004.png", dpi=160)
plt.show()
print("matplotlib_004.png 저장 완료")
예상 출력matplotlib_004.png 저장 완료
실제 그래프 출력
그래프 해석: 가로 길이로 값을 비교합니다.
05 · 기본 그래프
hist() 히스토그램
연속형 자료의 분포와 빈도를 구간별로 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(7)
a=rng.normal(70,12,500)
ax.hist(a,bins=18,color='steelblue',edgecolor='white')
fig.tight_layout()
fig.savefig("matplotlib_005.png", dpi=160)
plt.show()
print("matplotlib_005.png 저장 완료")
예상 출력matplotlib_005.png 저장 완료
실제 그래프 출력
그래프 해석: 막대는 구간별 관측 빈도를 뜻합니다.
06 · 기본 그래프
pie() 원그래프
전체에 대한 범주별 비율을 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
ax.pie([40,30,20,10],labels=['A','B','C','D'],autopct='%1.0f%%',startangle=90)
ax.axis('equal')
fig.tight_layout()
fig.savefig("matplotlib_006.png", dpi=160)
plt.show()
print("matplotlib_006.png 저장 완료")
예상 출력matplotlib_006.png 저장 완료
실제 그래프 출력
그래프 해석: 각 부채꼴 면적은 전체 대비 비율을 뜻합니다.
07 · 기본 그래프
boxplot() 상자그림
중앙값·사분위수·이상치를 한눈에 비교합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(2)
a=rng.normal(70,9,100);b=rng.normal(76,13,100)
ax.boxplot([a,b],tick_labels=['Class A','Class B'])
fig.tight_layout()
fig.savefig("matplotlib_007.png", dpi=160)
plt.show()
print("matplotlib_007.png 저장 완료")
예상 출력matplotlib_007.png 저장 완료
실제 그래프 출력
그래프 해석: 상자 내부 선은 중앙값, 상자 양 끝은 사분위수입니다.
08 · 기본 그래프
violinplot() 바이올린
분포 밀도와 데이터의 퍼짐을 비교합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(3)
a=rng.normal(0,1,250);b=rng.normal(1,0.6,250)
ax.violinplot([a,b],showmedians=True);ax.set_xticks([1,2],['A','B'])
fig.tight_layout()
fig.savefig("matplotlib_008.png", dpi=160)
plt.show()
print("matplotlib_008.png 저장 완료")
예상 출력matplotlib_008.png 저장 완료
실제 그래프 출력
그래프 해석: 폭이 넓은 부분에 데이터가 상대적으로 많이 모여 있습니다.
09 · 기본 그래프
stem() 이산 신호
이산 시퀀스의 값과 기준선 사이를 줄기로 연결합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
n=np.arange(0,16);y=np.cos(n*np.pi/4)
ax.stem(n,y);ax.set_xlabel('n')
fig.tight_layout()
fig.savefig("matplotlib_009.png", dpi=160)
plt.show()
print("matplotlib_009.png 저장 완료")
예상 출력matplotlib_009.png 저장 완료
실제 그래프 출력
그래프 해석: 연속 함수보다 정수 인덱스의 이산값에 적합합니다.
10 · 기본 그래프
step() 계단 함수
값이 구간별로 일정하게 유지되는 과정을 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(0,8);y=np.array([1,1,3,3,2,5,5,4])
ax.step(x,y,where='post');ax.set_xticks(x)
fig.tight_layout()
fig.savefig("matplotlib_010.png", dpi=160)
plt.show()
print("matplotlib_010.png 저장 완료")
예상 출력matplotlib_010.png 저장 완료
실제 그래프 출력
그래프 해석: 구간 경계에서 값이 갑자기 바뀝니다.
11 · 기본 그래프
stackplot() 누적 영역
시간에 따른 구성 요소의 합계와 기여도를 보여 줍니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(1,8)
a=np.array([2,3,4,3,5,4,6]);b=np.array([1,2,2,3,2,4,3]);c=np.array([2,1,2,2,3,2,3])
ax.stackplot(x,a,b,c,labels=['A','B','C']);ax.legend(loc='upper left')
fig.tight_layout()
fig.savefig("matplotlib_011.png", dpi=160)
plt.show()
print("matplotlib_011.png 저장 완료")
예상 출력matplotlib_011.png 저장 완료
실제 그래프 출력
그래프 해석: 전체 높이는 요소들의 합입니다.
12 · 기본 그래프
fill_between() 영역
두 곡선 사이의 영역이나 적분 구간을 강조합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(0,np.pi,250);y=np.sin(x)
ax.plot(x,y);ax.fill_between(x,0,y,alpha=.35)
ax.set_title('Area under sin(x)')
fig.tight_layout()
fig.savefig("matplotlib_012.png", dpi=160)
plt.show()
print("matplotlib_012.png 저장 완료")
예상 출력matplotlib_012.png 저장 완료
실제 그래프 출력
그래프 해석: 채운 부분은 0에서 π까지 sin(x)의 정적분 영역입니다.
13 · 기본 그래프
errorbar() 오차막대
측정값과 불확실성 또는 변동 범위를 함께 표시합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(1,7);y=np.array([3,4,5,4,6,7]);err=np.array([.3,.5,.4,.6,.5,.3])
ax.errorbar(x,y,yerr=err,fmt='o-',capsize=5)
fig.tight_layout()
fig.savefig("matplotlib_013.png", dpi=160)
plt.show()
print("matplotlib_013.png 저장 완료")
예상 출력matplotlib_013.png 저장 완료
실제 그래프 출력
그래프 해석: 오차막대는 입력한 오차의 크기이며 자동으로 신뢰구간을 의미하지는 않습니다.
14 · 기본 그래프
hexbin() 육각 밀도
점이 많을 때 중첩을 줄여 2차원 밀도를 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(1);x=rng.normal(size=1500);y=.7*x+rng.normal(size=1500)
h=ax.hexbin(x,y,gridsize=24,cmap='viridis');fig.colorbar(h,ax=ax,label='Count')
fig.tight_layout()
fig.savefig("matplotlib_014.png", dpi=160)
plt.show()
print("matplotlib_014.png 저장 완료")
예상 출력matplotlib_014.png 저장 완료
실제 그래프 출력
그래프 해석: 진한 영역은 관측점이 밀집한 위치입니다.
15 · 이미지·행렬
imshow() 이미지·열지도
2차원 배열을 색상으로 시각화합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-2,2,60);X,Y=np.meshgrid(x,x);Z=np.exp(-(X**2+Y**2))
im=ax.imshow(Z,origin='lower',extent=[-2,2,-2,2],cmap='inferno')
fig.colorbar(im,ax=ax)
fig.tight_layout()
fig.savefig("matplotlib_015.png", dpi=160)
plt.show()
print("matplotlib_015.png 저장 완료")
예상 출력matplotlib_015.png 저장 완료
실제 그래프 출력
그래프 해석: 색은 행렬의 수치값을 나타냅니다.
16 · 이미지·행렬
matshow() 행렬 시각화
행렬 요소를 격자 형태의 색상으로 보여 줍니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
A=np.array([[1,2,3],[2,5,4],[3,4,9]])
im=ax.matshow(A,cmap='Blues');fig.colorbar(im,ax=ax)
for i in range(3):
for j in range(3):ax.text(j,i,str(A[i,j]),ha='center',va='center')
fig.tight_layout()
fig.savefig("matplotlib_016.png", dpi=160)
plt.show()
print("matplotlib_016.png 저장 완료")
예상 출력matplotlib_016.png 저장 완료
실제 그래프 출력
그래프 해석: 행렬의 패턴과 대칭성을 확인할 수 있습니다.
17 · 이미지·행렬
pcolormesh() 격자 색상
비균일 격자나 2차원 수치 필드를 색으로 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-3,3,70);y=np.linspace(-2,2,55);X,Y=np.meshgrid(x,y)
Z=np.sin(X)*np.cos(Y)
im=ax.pcolormesh(X,Y,Z,shading='auto',cmap='coolwarm');fig.colorbar(im,ax=ax)
fig.tight_layout()
fig.savefig("matplotlib_017.png", dpi=160)
plt.show()
print("matplotlib_017.png 저장 완료")
예상 출력matplotlib_017.png 저장 완료
실제 그래프 출력
그래프 해석: 양수·음수 영역을 색상으로 구분합니다.
18 · 이미지·행렬
contour() 등고선
같은 함수값을 갖는 점을 선으로 연결합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-3,3,100);X,Y=np.meshgrid(x,x);Z=X**2+2*Y**2
cs=ax.contour(X,Y,Z,levels=10);ax.clabel(cs,inline=True,fontsize=7)
fig.tight_layout()
fig.savefig("matplotlib_018.png", dpi=160)
plt.show()
print("matplotlib_018.png 저장 완료")
예상 출력matplotlib_018.png 저장 완료
실제 그래프 출력
그래프 해석: 동일한 높이 또는 에너지를 갖는 등위선을 관찰합니다.
19 · 이미지·행렬
contourf() 채운 등고선
2변수 함수의 등위 영역을 색으로 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-3,3,100);X,Y=np.meshgrid(x,x);Z=np.sin(X)*np.cos(Y)
cs=ax.contourf(X,Y,Z,levels=15,cmap='viridis');fig.colorbar(cs,ax=ax)
fig.tight_layout()
fig.savefig("matplotlib_019.png", dpi=160)
plt.show()
print("matplotlib_019.png 저장 완료")
예상 출력matplotlib_019.png 저장 완료
실제 그래프 출력
그래프 해석: 색상 구간별로 함수값의 크기를 비교합니다.
20 · 이미지·행렬
quiver() 벡터장
각 점의 벡터 방향과 크기를 화살표로 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-2,2,13);X,Y=np.meshgrid(x,x)
U=-Y;V=X
ax.quiver(X,Y,U,V);ax.set_aspect('equal')
fig.tight_layout()
fig.savefig("matplotlib_020.png", dpi=160)
plt.show()
print("matplotlib_020.png 저장 완료")
예상 출력matplotlib_020.png 저장 완료
실제 그래프 출력
그래프 해석: 원점 주위를 도는 회전 벡터장입니다.
21 · 이미지·행렬
streamplot() 흐름선
벡터장을 따라 이어지는 흐름을 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-2,2,60);X,Y=np.meshgrid(x,x)
U=-Y;V=X
ax.streamplot(X,Y,U,V,density=1.1);ax.set_aspect('equal')
fig.tight_layout()
fig.savefig("matplotlib_021.png", dpi=160)
plt.show()
print("matplotlib_021.png 저장 완료")
예상 출력matplotlib_021.png 저장 완료
실제 그래프 출력
그래프 해석: 유체나 전자기장 흐름의 경로를 시각화합니다.
22 · 이미지·행렬
spy() 희소행렬 패턴
0이 아닌 행렬 원소의 위치를 표시합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
A=np.zeros((18,18));np.fill_diagonal(A,1)
for i in range(17):A[i,i+1]=1
ax.spy(A,markersize=7)
fig.tight_layout()
fig.savefig("matplotlib_022.png", dpi=160)
plt.show()
print("matplotlib_022.png 저장 완료")
예상 출력matplotlib_022.png 저장 완료
실제 그래프 출력
그래프 해석: 희소행렬의 대각선 및 인접 패턴을 확인합니다.
23 · 좌표·축
semilogx() 로그 x축
x축의 규모가 크게 달라지는 자료에 사용합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.logspace(0,4,150);y=np.log10(x)
ax.semilogx(x,y);ax.grid(True,which='both')
fig.tight_layout()
fig.savefig("matplotlib_023.png", dpi=160)
plt.show()
print("matplotlib_023.png 저장 완료")
예상 출력matplotlib_023.png 저장 완료
실제 그래프 출력
그래프 해석: x축의 같은 간격은 같은 배율 변화를 뜻합니다.
24 · 좌표·축
semilogy() 로그 y축
지수 증가와 감소를 직선 형태로 파악하기 좋습니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(0,5,150);y=np.exp(x)
ax.semilogy(x,y);ax.grid(True,which='both')
fig.tight_layout()
fig.savefig("matplotlib_024.png", dpi=160)
plt.show()
print("matplotlib_024.png 저장 완료")
예상 출력matplotlib_024.png 저장 완료
실제 그래프 출력
그래프 해석: 지수함수는 로그 y축에서 직선이 됩니다.
25 · 좌표·축
loglog() 양축 로그
거듭제곱 관계를 분석합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.logspace(0,3,150);y=x**1.5
ax.loglog(x,y);ax.grid(True,which='both')
fig.tight_layout()
fig.savefig("matplotlib_025.png", dpi=160)
plt.show()
print("matplotlib_025.png 저장 완료")
예상 출력matplotlib_025.png 저장 완료
실제 그래프 출력
그래프 해석: 로그-로그 그래프의 기울기는 거듭제곱 지수와 관계있습니다.
26 · 좌표·축
polar() 극좌표
각도와 반지름으로 곡선을 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
theta=np.linspace(0,2*np.pi,500);r=1+0.5*np.cos(5*theta)
ax.remove();ax=fig.add_subplot(111,projection='polar')
ax.plot(theta,r)
fig.tight_layout()
fig.savefig("matplotlib_026.png", dpi=160)
plt.show()
print("matplotlib_026.png 저장 완료")
예상 출력matplotlib_026.png 저장 완료
실제 그래프 출력
그래프 해석: 꽃잎처럼 반복되는 극좌표 곡선입니다.
27 · 좌표·축
twinx() 이중 y축
같은 x축에서 단위가 다른 두 변수를 비교합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(1,13);a=15+8*np.sin(x/2);b=100+20*np.cos(x/3)
ax.plot(x,a,color='tab:blue',label='Temperature')
ax2=ax.twinx();ax2.plot(x,b,color='tab:orange',label='Pressure')
ax.set_ylabel('Temperature');ax2.set_ylabel('Pressure')
fig.tight_layout()
fig.savefig("matplotlib_027.png", dpi=160)
plt.show()
print("matplotlib_027.png 저장 완료")
예상 출력matplotlib_027.png 저장 완료
실제 그래프 출력
그래프 해석: 축 단위가 다르므로 선의 높이를 직접 비교하면 안 됩니다.
28 · 좌표·축
set_xlim/ylim() 범위 조절
축 범위를 지정해 관심 영역을 확대합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-10,10,600);ax.plot(x,np.sin(x)/np.where(x==0,1,x))
ax.set_xlim(-4,4);ax.set_ylim(-.4,1.1)
fig.tight_layout()
fig.savefig("matplotlib_028.png", dpi=160)
plt.show()
print("matplotlib_028.png 저장 완료")
예상 출력matplotlib_028.png 저장 완료
실제 그래프 출력
그래프 해석: 그래프에서 보고 싶은 구간을 명확히 합니다.
29 · 좌표·축
set_xticks/yticks() 눈금
눈금 위치와 레이블을 지정합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(5);ax.plot(x,[2,5,3,6,4],marker='o')
ax.set_xticks(x,['Mon','Tue','Wed','Thu','Fri']);ax.set_yticks(range(0,8,2))
fig.tight_layout()
fig.savefig("matplotlib_029.png", dpi=160)
plt.show()
print("matplotlib_029.png 저장 완료")
예상 출력matplotlib_029.png 저장 완료
실제 그래프 출력
그래프 해석: 자료의 의미에 맞게 축 눈금을 지정합니다.
30 · 꾸미기·주석
set_title/xlabel/ylabel()
그래프 제목과 축 이름으로 의미를 명확히 합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(0,10,150);ax.plot(x,np.sqrt(x))
ax.set_title('Square-root growth');ax.set_xlabel('Time (s)');ax.set_ylabel('Distance (m)')
fig.tight_layout()
fig.savefig("matplotlib_030.png", dpi=160)
plt.show()
print("matplotlib_030.png 저장 완료")
예상 출력matplotlib_030.png 저장 완료
실제 그래프 출력
그래프 해석: 축 이름과 단위를 표시하는 것이 중요합니다.
31 · 꾸미기·주석
legend() 범례
여러 데이터 계열을 구분합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(0,2*np.pi,250)
ax.plot(x,np.sin(x),label='sin(x)');ax.plot(x,np.cos(x),label='cos(x)')
ax.legend(loc='upper right')
fig.tight_layout()
fig.savefig("matplotlib_031.png", dpi=160)
plt.show()
print("matplotlib_031.png 저장 완료")
예상 출력matplotlib_031.png 저장 완료
실제 그래프 출력
그래프 해석: 범례는 선의 의미를 설명합니다.
32 · 꾸미기·주석
grid() 격자
값을 읽기 쉽게 격자선을 추가합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(1,11);ax.plot(x,x**.7,marker='o')
ax.grid(True,linestyle='--',alpha=.5)
fig.tight_layout()
fig.savefig("matplotlib_032.png", dpi=160)
plt.show()
print("matplotlib_032.png 저장 완료")
예상 출력matplotlib_032.png 저장 완료
실제 그래프 출력
그래프 해석: 격자선을 사용하면 좌표값을 비교하기 쉽습니다.
33 · 꾸미기·주석
annotate() 화살표 주석
중요한 점이나 사건을 화살표로 강조합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-3,3,200);y=-(x-1)**2+4
ax.plot(x,y);ax.annotate('Maximum (1,4)',xy=(1,4),xytext=(-2,2),arrowprops=dict(arrowstyle='->'))
fig.tight_layout()
fig.savefig("matplotlib_033.png", dpi=160)
plt.show()
print("matplotlib_033.png 저장 완료")
예상 출력matplotlib_033.png 저장 완료
실제 그래프 출력
그래프 해석: 극댓값과 같은 중요한 특징을 표시합니다.
34 · 꾸미기·주석
text() 텍스트
특정 좌표에 설명 문구를 배치합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-2,2,200);ax.plot(x,x**2)
ax.text(-1.7,3,'Parabola',fontsize=12,bbox=dict(facecolor='white',alpha=.7))
fig.tight_layout()
fig.savefig("matplotlib_034.png", dpi=160)
plt.show()
print("matplotlib_034.png 저장 완료")
예상 출력matplotlib_034.png 저장 완료
실제 그래프 출력
그래프 해석: 그래프 안에 간단한 해설을 넣을 수 있습니다.
35 · 꾸미기·주석
axhline/axvline() 기준선
임계값·평균·목표값을 표시합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.arange(10);y=np.array([4,5,7,3,8,6,5,9,7,4])
ax.plot(x,y,marker='o');ax.axhline(y.mean(),color='red',ls='--',label='Mean');ax.axvline(5,color='gray',ls=':');ax.legend()
fig.tight_layout()
fig.savefig("matplotlib_035.png", dpi=160)
plt.show()
print("matplotlib_035.png 저장 완료")
예상 출력matplotlib_035.png 저장 완료
실제 그래프 출력
그래프 해석: 평균과 특정 시점을 기준으로 변화를 비교합니다.
36 · 꾸미기·주석
axvspan/axhspan() 강조 영역
특정 구간을 배경색으로 강조합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(0,10,300);ax.plot(x,np.sin(x))
ax.axvspan(3,5,color='orange',alpha=.25,label='Focus interval');ax.legend()
fig.tight_layout()
fig.savefig("matplotlib_036.png", dpi=160)
plt.show()
print("matplotlib_036.png 저장 완료")
예상 출력matplotlib_036.png 저장 완료
실제 그래프 출력
그래프 해석: 관심 구간을 쉽게 알아볼 수 있습니다.
37 · 꾸미기·주석
set_aspect() 종횡비
x와 y축의 단위 길이를 동일하게 설정합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
theta=np.linspace(0,2*np.pi,400)
ax.plot(2*np.cos(theta),2*np.sin(theta));ax.set_aspect('equal')
fig.tight_layout()
fig.savefig("matplotlib_037.png", dpi=160)
plt.show()
print("matplotlib_037.png 저장 완료")
예상 출력matplotlib_037.png 저장 완료
실제 그래프 출력
그래프 해석: 종횡비를 맞추지 않으면 원이 타원처럼 보일 수 있습니다.
38 · 여러 그림·레이아웃
subplots() 다중 패널
여러 그래프를 하나의 그림에 배치합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
fig.clf();axs=fig.subplots(1,2)
x=np.linspace(-3,3,300)
axs[0].plot(x,x**2);axs[0].set_title('Square')
axs[1].plot(x,x**3);axs[1].set_title('Cube')
fig.tight_layout()
fig.savefig("matplotlib_038.png", dpi=160)
plt.show()
print("matplotlib_038.png 저장 완료")
예상 출력matplotlib_038.png 저장 완료
실제 그래프 출력
그래프 해석: 두 함수를 나란히 비교합니다.
39 · 여러 그림·레이아웃
subplot_mosaic() 모자이크
이름이 있는 패널을 자유롭게 배치합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
fig.clf();axs=fig.subplot_mosaic([['A','B'],['A','C']])
x=np.linspace(0,6,150)
axs['A'].plot(x,np.sin(x));axs['B'].bar([1,2,3],[2,4,3]);axs['C'].scatter([1,2,3],[3,2,4])
fig.tight_layout()
fig.savefig("matplotlib_039.png", dpi=160)
plt.show()
print("matplotlib_039.png 저장 완료")
예상 출력matplotlib_039.png 저장 완료
실제 그래프 출력
그래프 해석: 넓이가 다른 패널로 정보를 계층화합니다.
40 · 여러 그림·레이아웃
inset_axes() 확대 삽입
큰 그래프 안에 작은 확대 그래프를 넣습니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(-4,4,500);y=np.sin(4*x)/(1+x*x)
ax.plot(x,y)
small=ax.inset_axes([.58,.58,.36,.32]);small.plot(x,y);small.set_xlim(-.5,.5);small.set_ylim(-1.2,1.2)
fig.tight_layout()
fig.savefig("matplotlib_040.png", dpi=160)
plt.show()
print("matplotlib_040.png 저장 완료")
예상 출력matplotlib_040.png 저장 완료
실제 그래프 출력
그래프 해석: 특정 구간을 상세히 관찰합니다.
41 · 통계·고급
ecdf() 경험적 누적분포
관측값 이하의 비율을 누적해서 보여 줍니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(10);a=np.sort(rng.normal(size=150))
y=np.arange(1,len(a)+1)/len(a)
ax.step(a,y,where='post');ax.set_ylim(0,1);ax.set_ylabel('Cumulative proportion')
fig.tight_layout()
fig.savefig("matplotlib_041.png", dpi=160)
plt.show()
print("matplotlib_041.png 저장 완료")
예상 출력matplotlib_041.png 저장 완료
실제 그래프 출력
그래프 해석: 누적 비율을 직접 계산하여 그린 ECDF입니다.
42 · 통계·고급
eventplot() 이벤트 시점
여러 시퀀스의 이벤트 발생 위치를 표시합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(4)
a=np.sort(rng.uniform(0,10,15));b=np.sort(rng.uniform(0,10,25))
ax.eventplot([a,b],lineoffsets=[1,2],linelengths=.7);ax.set_ylim(.4,2.6)
fig.tight_layout()
fig.savefig("matplotlib_042.png", dpi=160)
plt.show()
print("matplotlib_042.png 저장 완료")
예상 출력matplotlib_042.png 저장 완료
실제 그래프 출력
그래프 해석: 시간에 따라 이벤트가 집중되는 구간을 확인합니다.
43 · 통계·고급
specgram() 스펙트로그램
시간에 따른 신호의 주파수 성분을 색으로 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
fs=500;t=np.arange(0,2,1/fs)
s=np.sin(2*np.pi*(20*t+25*t*t))
ax.specgram(s,Fs=fs,NFFT=128,noverlap=96,cmap='viridis')
fig.tight_layout()
fig.savefig("matplotlib_043.png", dpi=160)
plt.show()
print("matplotlib_043.png 저장 완료")
예상 출력matplotlib_043.png 저장 완료
실제 그래프 출력
그래프 해석: 주파수가 시간에 따라 증가하는 신호를 보여 줍니다.
44 · 통계·고급
psd() 파워 스펙트럼
신호의 주파수별 파워 분포를 확인합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
fs=500;t=np.arange(0,2,1/fs)
s=np.sin(2*np.pi*30*t)+.5*np.sin(2*np.pi*80*t)
ax.psd(s,Fs=fs,NFFT=256);ax.set_xlim(0,150)
fig.tight_layout()
fig.savefig("matplotlib_044.png", dpi=160)
plt.show()
print("matplotlib_044.png 저장 완료")
예상 출력matplotlib_044.png 저장 완료
실제 그래프 출력
그래프 해석: 30Hz와 80Hz 부근에 주요 주파수 성분이 나타납니다.
45 · 통계·고급
acorr() 자기상관
시차에 따른 신호의 자기 유사성을 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.sin(np.linspace(0,8*np.pi,200))
ax.acorr(x,maxlags=40);ax.set_xlabel('Lag')
fig.tight_layout()
fig.savefig("matplotlib_045.png", dpi=160)
plt.show()
print("matplotlib_045.png 저장 완료")
예상 출력matplotlib_045.png 저장 완료
실제 그래프 출력
그래프 해석: 주기성을 가진 신호는 일정 시차에서 상관이 커집니다.
46 · 3차원·특수
plot_surface() 3차원 곡면
2변수 함수를 3차원 표면으로 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
ax.remove();ax=fig.add_subplot(111,projection='3d')
x=np.linspace(-2,2,45);X,Y=np.meshgrid(x,x);Z=np.sin(X**2+Y**2)
ax.plot_surface(X,Y,Z,cmap='viridis');ax.set_zlabel('z')
fig.tight_layout()
fig.savefig("matplotlib_046.png", dpi=160)
plt.show()
print("matplotlib_046.png 저장 완료")
예상 출력matplotlib_046.png 저장 완료
실제 그래프 출력
그래프 해석: 표면의 높이는 z=f(x,y)를 뜻합니다.
47 · 3차원·특수
plot_wireframe() 와이어프레임
3차원 표면을 격자선으로 표현합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
ax.remove();ax=fig.add_subplot(111,projection='3d')
x=np.linspace(-2,2,30);X,Y=np.meshgrid(x,x);Z=X**2-Y**2
ax.plot_wireframe(X,Y,Z,rstride=2,cstride=2)
fig.tight_layout()
fig.savefig("matplotlib_047.png", dpi=160)
plt.show()
print("matplotlib_047.png 저장 완료")
예상 출력matplotlib_047.png 저장 완료
실제 그래프 출력
그래프 해석: 안장면의 곡률 방향을 관찰합니다.
48 · 3차원·특수
scatter() 3차원 점
3차원 위치 데이터를 산점도로 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
ax.remove();ax=fig.add_subplot(111,projection='3d')
rng=np.random.default_rng(5);xyz=rng.normal(size=(150,3))
ax.scatter(xyz[:,0],xyz[:,1],xyz[:,2],c=xyz[:,2],cmap='plasma')
fig.tight_layout()
fig.savefig("matplotlib_048.png", dpi=160)
plt.show()
print("matplotlib_048.png 저장 완료")
예상 출력matplotlib_048.png 저장 완료
실제 그래프 출력
그래프 해석: 3차원 공간의 점 분포를 나타냅니다.
49 · 3차원·특수
plot() 3차원 나선
3차원 매개변수 곡선을 그립니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
ax.remove();ax=fig.add_subplot(111,projection='3d')
t=np.linspace(0,6*np.pi,500)
ax.plot(np.cos(t),np.sin(t),t/(2*np.pi));ax.set_zlabel('height')
fig.tight_layout()
fig.savefig("matplotlib_049.png", dpi=160)
plt.show()
print("matplotlib_049.png 저장 완료")
예상 출력matplotlib_049.png 저장 완료
실제 그래프 출력
그래프 해석: 원운동과 높이 증가를 합친 나선입니다.
50 · 3차원·특수
tricontourf() 비정형 격자
불규칙하게 흩어진 점에서 등고 영역을 그립니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(8);x=rng.uniform(-2,2,220);y=rng.uniform(-2,2,220)
z=np.sin(x)*np.cos(y)
cs=ax.tricontourf(x,y,z,levels=12);fig.colorbar(cs,ax=ax)
fig.tight_layout()
fig.savefig("matplotlib_050.png", dpi=160)
plt.show()
print("matplotlib_050.png 저장 완료")
예상 출력matplotlib_050.png 저장 완료
실제 그래프 출력
그래프 해석: 규칙적인 meshgrid가 없어도 등고선을 계산합니다.
51 · 3차원·특수
triplot() 삼각 분할
불규칙한 점들을 삼각형으로 연결합니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
rng=np.random.default_rng(12);x=rng.random(50);y=rng.random(50)
ax.triplot(x,y);ax.plot(x,y,'o',ms=3)
fig.tight_layout()
fig.savefig("matplotlib_051.png", dpi=160)
plt.show()
print("matplotlib_051.png 저장 완료")
예상 출력matplotlib_051.png 저장 완료
실제 그래프 출력
그래프 해석: 삼각망은 유한요소법·지형 모델의 기초입니다.
52 · 3차원·특수
broken_barh() 시간 구간
작업이나 사건의 시작과 지속시간을 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
ax.broken_barh([(1,3),(6,2)],(10,8),facecolors='tab:blue')
ax.broken_barh([(2,2),(5,4)],(22,8),facecolors='tab:orange')
ax.set_ylim(5,35);ax.set_yticks([14,26],['Task A','Task B']);ax.set_xlim(0,10)
fig.tight_layout()
fig.savefig("matplotlib_052.png", dpi=160)
plt.show()
print("matplotlib_052.png 저장 완료")
예상 출력matplotlib_052.png 저장 완료
실제 그래프 출력
그래프 해석: 간단한 간트 차트처럼 활용할 수 있습니다.
53 · 3차원·특수
stairs() 구간별 계단
히스토그램이나 구간별 값을 계단으로 나타냅니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
values=[2,5,3,6,4];edges=[0,1,2,3,4,5]
ax.stairs(values,edges,fill=True,alpha=.3)
fig.tight_layout()
fig.savefig("matplotlib_053.png", dpi=160)
plt.show()
print("matplotlib_053.png 저장 완료")
예상 출력matplotlib_053.png 저장 완료
실제 그래프 출력
그래프 해석: 구간별로 일정한 높이의 값을 표시합니다.
54 · 3차원·특수
imshow() RGB 이미지
RGB 채널로 색상 이미지를 직접 만듭니다.
독립 실행 파이썬 코드
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7, 4))
x=np.linspace(0,1,150);X,Y=np.meshgrid(x,x)
img=np.dstack([X,Y,1-X]);ax.imshow(img);ax.axis('off')
fig.tight_layout()
fig.savefig("matplotlib_054.png", dpi=160)
plt.show()
print("matplotlib_054.png 저장 완료")
예상 출력matplotlib_054.png 저장 완료
실제 그래프 출력
그래프 해석: 빨강·초록·파랑 채널을 합성합니다.
3. 그래프를 이해하는 핵심 개념
개념
의미
Figure
전체 그림 또는 출력 파일의 바탕
Axes
그래프가 그려지는 좌표 영역
Artist
선, 점, 글자, 축 등 시각 요소의 공통 개념
Colormap
수치값을 색으로 대응시키는 규칙
Legend
데이터 계열을 구분하는 범례
savefig
PNG, SVG, PDF 등으로 그래프 저장
Matplotlib에는 수많은 클래스와 메서드가 있으며, 이 교재는 수업·탐구에 자주 활용되는 대표 기능을 폭넓게 다룹니다. 전체 API의 모든 메서드를 망라한 목록은 아닙니다. 공식 문서: matplotlib.org/stable/api