Updated:

import matplotlib.pyplot as plt
import numpy as np

1. line

1.1. Axes.plot()

matplotlib에서 line을 그릴 때는 Axes.plot()을 이용한다.

Axes.plot()은 line뿐만 아니라 marker만을 이용해 그릴 때도 쓰인다.

Axes.plot([x],y,[fmt])

  • y: 일반적으로 생각하는 (x,y) 중 y를 가리킨다.
  • x: 일반적으로 생각하는 (x,y) 중 x를 가리킨다. / x는 꼭 포함하지 않아도 되며 이 때 x축애는 y의 index array가 표시
  • fmt: color,marker,linestyle를 합친 문자열 / ‘[color][marker][line]’
    • e.g.) color=’r’, marker=’o’, linestyle=”:” -> fmt:’ro:’
  • line을 그리기 때문에 Line2D Properties를 만족한다.
    • color, marker, linestyle, linewidth, markersize, alpha 같은 parameter를 추가할 수 있다.
y = np.random.normal(0,1,(15,))

fig,ax = plt.subplots(figsize=(7,7))

ax.plot(y)
[<matplotlib.lines.Line2D at 0x7fe6cc32e970>]

x = np.arange(10,25)
y = np.random.normal(0,1,(15,))

fig,ax = plt.subplots(figsize=(7,7))

ax.plot(x,y)
[<matplotlib.lines.Line2D at 0x7fe6cc5bff40>]

1.2. Axes.axvline(), Axes.axhline()

axes에 vertical line을 그리거나 horizontal line을 그릴 때 사용한다.

Axes.axvline(x=0,ymin=0,ymax=1)

  • x: vertical line이 위치할 x좌표
  • ymin, ymax: vertical line의 시작위치와 끝위치 표시, 별도 표시가 없는 경우 처음부터 끝까지 그려짐
  • Line2D의 특성을 지님

Axes.axhline(y=0,xmin=0,xmax=1)

  • y: horizontal line이 위치할 y좌표
  • xmin, xmax: horizontal line의 시작위치와 끝위치 표시, 별도 표시가 없는 경우 처음부터 끝까지 그려짐
  • Line2D의 특성을 지님
fig,axes = plt.subplots(2,1,figsize=(7,7))

axes[0].axvline(0.4)
axes[0].axvline(0.2,ymin=0.4,ymax=0.6)

axes[1].axhline(0.4)
axes[1].axhline(0.2,xmin=0.4,xmax=0.6)
<matplotlib.lines.Line2D at 0x7fe6cc723af0>

2. Label and Legend

matplotlib에서는 그래프에 나와있는 선이 어떤 선인지 표시할 수 있는 기호 설명표를 달 수 있다. 기호 설명표에 표시하기 위해서는 각각의 plot함수마다 label parameter를 넣어주어야한다.

Axes.legend() Parameter

  • loc: legend의 위치. text의 ha와 va랑 비슷하다고 생각하면 된다.
    • vertical을 기준으로 하면 upper, center, lower로 나눌 수 있다.
    • horizontal을 기준으로 하면 left, center, right로 나눌 수 있다.
    • 맨 위 왼쪽(‘upper left’), 맨 위 가운데(‘upper center’), 맨 위 오른쪽(‘upper right’)
    • 가운데 왼쪽(‘upper left’), 가운데 오른쪽(‘upper right’)
    • 맨 아래 왼쪽(‘lower left’), 맨 아래 가운데(‘lower center’), 맨 아래 오른쪽(‘lower right’)
  • bbox_to_anchor: legend가 axes 내에서 어느 위치에 달릴 지 표시하는 2-tuple. text의 x,y postion과 비슷하다.
    • x축과 y축을 0 ~ 1까지의 비율로 생각하여 위치 좌표를 표시한다.
    • e.g.) (0.5,0): x축 중간, y축 맨 아래에 표시 / (0,1): x축 맨 왼쪽, y축 맨 위에 표시 / (0.5,0.5): x축 중간, y축 중간에 표시
    • bbox_to_anchor와 loc의 관계: bbox_to_anchor가 있는 경우 그 지점에 loc를 기준으로 legend가 달리게 된다.
      • bbox_to_anchor=(1,0.5), loc=’center left’: x축 맨 오른쪽, y축 중간 지점에 legend의 ‘center left’가 위치함
  • ncol: legend가 몇개의 column으로 표시될 것인지 설정
  • facecolor: legend의 background color이다.
  • title: legend의 제목 표시
y = np.random.normal(0,1,(15,))

fig,ax = plt.subplots(figsize=(7,7))

ax.plot(y,label='plot 1')
ax.axhline(0,
           color='r',linestyle=":",alpha=0.5,
           label='y=0')

ax.legend(loc='center left',bbox_to_anchor=(1,0.5),
          title="Legend Example",ncol=2)
<matplotlib.legend.Legend at 0x7fe6cc788370>

3. filling the area

Axes.fill_between(x,y1,y2=0,where=None,interpolate=False) :두 line plot 사이의 영역을 채우는 역할을 한다.

  • x: x좌표
  • y1: 첫번째 plot
  • y2: 두번째 plot / 따로 표시하지 않는 경우 default가 0이다.
  • where: 어느쪽 영역이 채워질 것인지 표시하는 것
  • interpolate: where가 사용되고 두 plot이 교차했을 때 쓰인다.
    • 일반적으로 x가 촘촘하지 않은경우 두 plot사이가 완벽히 채워지지 않을 수 있는데 이 때 interpolate=True로 하면 두 plot 사이가 완벽히 채워진다.
fig,ax = plt.subplots(figsize=(8,8))

x = np.linspace(0,4*np.pi,100)
y1 = np.sin(x)

xticks = np.arange(0,5*np.pi,np.pi)
ax.set_xticks(xticks)


ax.plot(x,y1,
        color='k',
        linewidth=2,
        label='sin(x)')

ax.axhline(0,color='b',linewidth=1,
           label='y=0')

ax.fill_between(x,y1,hatch='//',
                color='w',edgecolor='gray')

ax.legend(loc='upper right',bbox_to_anchor=(1,1),fontsize =10)
<matplotlib.legend.Legend at 0x7fe6ccb748b0>

fig,axes = plt.subplots(2,1,figsize=(8,8))

fig.suptitle('cos(x) > sin(x)',fontsize=20)

x = np.linspace(0,4*np.pi,20)
y1 = np.sin(x)
y2 = np.cos(x)

xticks = np.arange(0,5*np.pi,np.pi)

for ax in axes.flat:
    ax.set_xticks(xticks)
    ax.plot(x,y1,
            color='k',
            linewidth=2,
            label='sin(x)')
    ax.plot(x,y2,
            color='r',
            linewidth=2,
            label='cos(x)')
    ax.axhline(0,color='b',linewidth=1,linestyle='--', alpha=0.5,
            label='y=0')

axes[0].fill_between(x,y1,y2,where=y1<y2,
                color='gray')

axes[1].fill_between(x,y1,y2,where=y1<y2,interpolate=True,
                color='gray')

axes[0].legend(loc='lower center',bbox_to_anchor=(0.5,1),ncol=3)
<matplotlib.legend.Legend at 0x7fe6ccbb9e80>

Leave a comment