matplotlib 정리(1)
#한글 폰트 안깨지게 설정
import platform
from matplotlib import font_manager, rc
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus'] = False
if platform.system() == 'Windows':
path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
elif platform.system() == 'Darwin':
rc('font', family='AppleGothic')
elif platform.system() == 'Linux':
rc('font', family='NanumBarunGothic')
from matplotlib import pyplot as plt
import numpy as np
x = np.arange(1,10)
y = x*5
plt.plot(x,y)
plt.show()
선 색깔 바꾸기
#b, g, r, c, m, y, b, w
plt.plot(x,y,'m')
x = np.arange(1,10)
y = x*5
plt.plot(x,y,'.')
마커 종류¶
. : point\ , : pixel\ o : circle\ v : triangle_down\ ^ : traingle_up\ < : traingle_left\ > : traingle_right\ 1 : tri_down\ 2 : tri_up\ 3 : tri_left\ 4 : tri_right\ s : square\ p : pentagon\ * : star\ h : hexagon1\ H : hexagon2\ + : plus\ x : x\ D : diamond\ d : thin_diamond\
plt.plot(x,y,'x')
선 종류¶
- solid\ -- dashed\ -. dash-dot\ \: dotted
plt.plot(x,y,':')
color(c) : 선색깔\ linewidth(lw) : 선굵기\ linestyle(ls) : 선스타일\ marker : 마커의 종류\ markersize(ms) : 마커의 크기\ markeredgecolor(mec) : 마커 선 색깔\ markeredgewidth(mew) : 마커 선 굵기\ markerfacecolor(mfc) : 마커 내부 색깔
plt.plot([10, 20, 30, 40], [1, 4, 9, 16], c="b",
lw=5, ls="--", marker="o", ms=15, mec="g", mew=5, mfc="r")
plt.plot([10, 20, 30, 40], [1, 4, 9, 16], c="b",
lw=5, ls="--", marker="o", ms=15, mec="g", mew=5, mfc="r")
plt.title("스타일 적용 예")
plt.show()
틱 : 플롯이나 차트에서 축의 위치 표시 지점 plt.xticks(표시 간격, 표시 형태)\ ex)\ plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])\ plt.yticks([-1, 0, 1], ["Low", "Zero", "High"])
plt.plot(x,y)
plt.xticks(range(2,10,3))
plt.yticks(range(0,50,10))
plt.show()
X = np.linspace(-np.pi, np.pi, 256)
C = np.cos(X)
plt.title("x축과 y축의 tick label 설정")
plt.plot(X, C)
plt.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi])
plt.yticks([-1, 0, +1])
plt.show()
t = np.arange(0., 5., 0.2)
plt.title("라인 플롯에서 여러개의 선 그리기")
plt.plot(t, t, 'r--',
t, 0.5 * t**2, 'bs:',
t, 0.2 * t**3, 'g^-')
plt.show()
plt.title("복수의 plot 명령을 한 그림에서 표현")
plt.plot([1, 4, 9, 16],
c="b", lw=5, ls="--", marker="o", ms=15, mec="g", mew=5, mfc="r")
# plt.hold(True) # <- 1,5 버전에서는 이 코드가 필요하다.
plt.plot([9, 16, 4, 1],
c="k", lw=3, ls=":", marker="s", ms=10, mec="m", mew=5, mfc="c")
# plt.hold(False) # <- 1,5 버전에서는 이 코드가 필요하다.
plt.show()
범례(legend)¶
best : 0\ upper right : 1\ upper left : 2\ lower left : 3\ lower right : 4\ right : 5\ center left : 6\ center right : 7\ lower center : 8\ upper center : 9\ center : 10
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.title("legend를 표시한 플롯")
plt.plot(X, C, ls="--", label="cosine")
plt.plot(X, S, ls=":", label="sine")
plt.legend(loc=0)
plt.show()
라벨(label)¶
xlabel, ylabel, title
X = np.linspace(-np.pi, np.pi, 256)
C, S = np.cos(X), np.sin(X)
plt.plot(X, C, label="cosine")
plt.xlabel("time")
plt.ylabel("amplitude")
plt.title("Cosine Plot")
plt.show()
그림의 구조¶
Figure 객체(그림이 그려지는 캔버스), Axes객체(하나의 플롯), Axis 객체(하나의 축) 등으로 구성 plt.subplot(행,열,위치)를 통해 한 Figure내에 여러 Axes 를 표현 가능\ plt.gcf()를 통해 Figure 객체를 얻을 수 있음. plt.gca()를 통해 Axes 객체를 얻을 수 있음.
f1 = plt.figure(1)
plt.title("현재의 Figure 객체")
plt.plot([1, 2, 3, 4], 'ro:')
f2 = plt.gcf()
print(f1, id(f1))
print(f2, id(f2))
plt.show()
x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)
ax1 = plt.subplot(1, 2, 1)
plt.plot(x1, y1, 'yo-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation')
print(ax1)
ax2 = plt.subplot(1, 2, 2)
plt.plot(x2, y2, 'r.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped')
print(ax2)
plt.tight_layout()
plt.show()
plt.subplot(221)
plt.plot(np.random.rand(5))
plt.title("axes 1")
plt.subplot(222)
plt.plot(np.random.rand(5))
plt.title("axes 2")
plt.subplot(223)
plt.plot(np.random.rand(5))
plt.title("axes 3")
plt.subplot(224)
plt.plot(np.random.rand(5))
plt.title("axes 4")
plt.tight_layout()
plt.show()
Axis 객체와 축¶
twinx 명령어를 통해 복수의 y축을 가진 플롯을 표기 가능
fig, ax0 = plt.subplots()
ax1 = ax0.twinx()
ax0.set_title("2개의 y축 한 figure에서 사용하기")
ax0.plot([10, 5, 2, 9, 7], 'r-', label="y0")
ax0.set_ylabel("y0")
ax0.grid(False)
ax1.plot([100, 200, 220, 180, 120], 'g:', label="y1")
ax1.set_ylabel("y1")
ax1.grid(False)
ax0.set_xlabel("공유되는 x축")
plt.show()
plt.savefig('./임시.png')
plt.grid()
범위(range)¶
plt.xlim(최소,최대) plt.ylim(최소,최대)
linspace(x1,x2,n) : (x2-x1)/(n-1) 간격의 점 n 개 생성
import numpy as np
import matplotlib.pyplot as plt
plt.subplots_adjust(hspace=0.4)
t = np.arange(0.01, 20.0, 0.01)
# log y axis
plt.subplot(221)
plt.semilogy(t, np.exp(-t/5.0))
plt.title('semilogy')
plt.grid(True)
# log x axis
plt.subplot(222)
plt.semilogx(t, np.sin(2*np.pi*t))
plt.title('semilogx')
plt.grid(True)
# log x and y axis
plt.subplot(223)
plt.loglog(t, 20*np.exp(-t/10.0), basex=2)
plt.grid(True)
plt.title('loglog base 2 on x')
# with errorbars: clip non-positive values
ax = plt.subplot(224)
ax.set_xscale("log", nonposx='clip')
ax.set_yscale("log", nonposy='clip')
x = 10.0**np.linspace(0.0, 2.0, 20)
y = x**2.0
plt.errorbar(x, y, xerr=0.1*x, yerr=5.0 + 0.75*y)
ax.set_ylim(ymin=0.1)
ax.set_title('Errorbars go negative')
plt.show()
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.figure(figsize=(10,6), dpi=80)
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
# Set limits
plt.xlim(X.min()*1.1, X.max()*1.1)
plt.ylim(C.min()*1.1, C.max()*1.1)
# Setting tick labels
plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi], [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
plt.yticks([-1, 0, +1], [r'$-1$', r'$0$', r'$+1$'])
# # Moving spines
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
# Adding a legend
plt.legend(loc='upper left', frameon=False)
ax
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.sin(t)), xycoords='data',
xytext=(+10, +30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot')
plt.show()
'python' 카테고리의 다른 글
numpy 정리(1) (0) | 2020.02.18 |
---|---|
주피터 노트북 변수 보기 및 실행시간 자동확인(Extensions) (0) | 2020.02.16 |
주피터 노트북에 메모리 사용량 모니터링 하기 (0) | 2020.01.24 |
python 회귀분석 할 때 주로 사용할 것 같은 패키지 및 코드 (0) | 2020.01.14 |
power shell 을 활용하여 windows에 jupyter notebook 설치하기 (0) | 2019.06.27 |