Matplotlib 다색 선 생성하기

Beginner

This tutorial is from open-source community. Access the source code

소개

이 랩에서는 Matplotlib 에서 여러 색상의 선을 만드는 방법을 배웁니다. LineCollection 함수를 사용하여 선분 집합을 생성하고, 미분값에 따라 개별적으로 색상을 지정합니다. 또한 경계 정규화 (boundary norm) 를 사용하여 선분 색상을 지정하는 방법도 배웁니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

라이브러리 임포트

이 랩에 필요한 라이브러리를 임포트하는 것으로 시작합니다. matplotlib.pyplotnumpy를 임포트합니다.

import matplotlib.pyplot as plt
import numpy as np

데이터 생성

0 과 3π 사이의 500 개의 균등하게 간격을 둔 값을 포함하는 numpy 배열 x를 생성합니다. 또한 x의 값의 사인 값을 포함하는 다른 numpy 배열 y를 생성합니다. 마지막으로, y의 첫 번째 미분값을 포함하는 numpy 배열 dydx를 생성합니다.

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))

선분 생성

개별적으로 색상을 지정할 수 있도록 일련의 선분을 생성합니다. numpy 의 concatenate 함수를 사용하여 두 배열 points[:-1]points[1:]을 두 번째 축을 따라 연결합니다. 그런 다음 결과 배열을 N x 1 x 2 배열로 재구성하여 점들을 쉽게 쌓아 세그먼트를 얻을 수 있습니다. 선 집합 (line collection) 에 대한 segments 배열은 (numlines) x (points per line) x 2 (x 및 y 에 대해) 여야 합니다.

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

연속적인 정규화 (Norm) 생성

데이터 포인트를 색상에 매핑하기 위해 연속적인 정규화 (norm) 를 생성합니다. matplotlib.pyplotNormalize 함수를 사용하여 dydx 값을 최소값과 최대값 사이로 정규화합니다. 그런 다음 LineCollection 함수를 사용하여 일련의 선분들을 생성하고, 각 선분의 미분값에 따라 개별적으로 색상을 지정합니다. set_array 함수를 사용하여 colormapping 에 사용되는 값을 설정합니다.

norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

Colorbar 생성

색상과 dydx 값 사이의 매핑을 표시하기 위해 colorbar 를 생성합니다. matplotlib.pyplotcolorbar 함수를 사용하여 colorbar 를 생성합니다.

line = plt.gca().add_collection(lc)
plt.colorbar(line)

경계 정규화 (Boundary Norm) 사용

선분들의 색상을 지정하기 위해 경계 정규화 (boundary norm) 를 사용합니다. 빨간색, 녹색, 파란색의 세 가지 색상을 포함하는 ListedColormap을 생성합니다. 그런 다음 경계 -1, -0.5, 0.5, 1 과 ListedColormap을 사용하여 BoundaryNorm을 생성합니다. set_array 함수를 사용하여 colormapping 에 사용되는 값을 설정합니다.

cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)

서브플롯 생성

색상으로 표시된 선분들을 보여주기 위해 서브플롯을 생성합니다. matplotlib.pyplotsubplots 함수를 사용하여 2x1 그리드의 서브플롯을 생성하고, sharexsharey 매개변수를 사용하여 서브플롯 간에 x 축과 y 축을 공유합니다.

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])

축 범위 설정

서브플롯의 x 축과 y 축 범위를 설정합니다.

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)

플롯 표시

matplotlib.pyplotshow 함수를 사용하여 플롯을 표시합니다.

plt.show()

요약

이 랩에서는 Matplotlib 에서 여러 색상의 선을 만드는 방법을 배웠습니다. LineCollection 함수를 사용하여 일련의 선분들을 생성하고, 각 선분의 미분값에 따라 개별적으로 색상을 지정했습니다. 또한 경계 정규화 (boundary norm) 를 사용하여 선분들의 색상을 지정하는 방법도 배웠습니다. Normalize 함수를 사용하여 dydx 값을 최소값과 최대값 사이로 정규화하고, ListedColormap 함수를 사용하여 빨강, 녹색, 파랑의 세 가지 색상으로 구성된 컬러맵을 만들었습니다. BoundaryNorm 함수를 사용하여 -1, -0.5, 0.5, 1 의 경계를 가진 경계 정규화와 ListedColormap을 생성했습니다. 마지막으로, subplots 함수를 사용하여 2x1 그리드의 서브플롯을 생성하고, sharexsharey 매개변수를 사용하여 서브플롯 간에 x 축과 y 축을 공유했습니다. 그런 다음 show 함수를 사용하여 플롯을 표시했습니다.