안녕하세요~ 꽁냥이에요. 이번 포스팅에서는 Matplotlib의 선 그래프에서 한 라인에 컬러 맵을 적용하는 방법을 알아보려고 합니다.
한 라인에 컬러 맵(Color Map) 적용하기 (feat. LineCollection)
한 라인에 컬러 맵을 적용하는 것은 LineCollection 클래스를 이용하면 됩니다. 아래 코드는 컬러 맵 'bwr'이라는 것을 사인(sin) 곡선에 적용한 것입니다. 코드 설명은 핵심 부분만 하겠습니다. 나머지는 주석을 참고해주세요.
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus'] = False
import matplotlib as mpl
import pandas as pd
from matplotlib.collections import LineCollection
## 데이터 생성
x = np.linspace(0, 3 * np.pi, 256)
y = np.sin(x)
## x, y 좌표 데이터
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1) ## 전체 라인을 작은 단위의 라인으로 쪼갠다.
## 컬러맵
cmap = plt.cm.get_cmap('bwr')
norm = mpl.colors.Normalize(vmin=x.min(), vmax=x.max())
## Line Collection 정의
lc = LineCollection(segments=segments, cmap=cmap, array=x, linewidth=4)
fig = plt.figure(figsize=(10,8))
fig.set_facecolor('white')
ax = fig.add_subplot()
ax.add_collection(lc) ## Line Collection 삽입
## x, y축 상한, 하한 설정
ax.set_xlim(x.min(), x.max())
ax.set_ylim(y.min()-1, y.max()+1)
plt.show()
line 18~19
먼저 라인에 입힐 컬러 맵을 선택합니다. Matplotlib에서 제공하는 컬러 맵이 어떤 것이 있는지 궁금하신 분들은 여기를 참고해주세요. 그리고 컬러 맵의 양 끝에 데이터의 최소값과 최대값이 대응될 수 있도록 vmin과 vmax를 지정합니다.
line 22
LineCollection 클래스를 생성합니다. segments인자에 라인 세부 조각을 넣어주고 cmap에는 컬러 맵, linewidth에는 라인 두께를 넣어줍니다. array인자는 색상을 적용할 데이터를 넣어주는데 꽁냥이는 x 데이터에 따른 컬러 맵을 적용할 것이므로 x를 넘겨줬습니다.
아래 코드를 실행하면 사인 곡선에 컬러 맵이 적용된 것을 알 수 있습니다.
사실 이번 포스팅에서는 Matplotlib 문서를 찾아보다가 라인에 컬러 맵 적용한 예제를 보게 되었고 이게 간지가 나서 소개하고 싶었습니다~ ㅎㅎ;
부디 이번 포스팅이 어떤 분께는 도움이 되시길 바라며 이상 포스팅 마치겠습니다.
'데이터 분석 > 시각화' 카테고리의 다른 글
[Matplotlib] Tip! 좌표축 Axes의 가로 세로 길이 Inche 단위로 알아보기 (feat. get_window_extent, dpi_scale_trans) (2) | 2023.01.03 |
---|---|
[Matplotlib] 여러 그래프 그릴 때 x축 , y축 범위 공유하기 (feat. sharex, sharey) (0) | 2022.11.05 |
[Matplotlib] 한 라인에 여러 색상 적용하기 (feat. LineCollection) (0) | 2022.10.30 |
[graphviz] subgraph와 cluster 그려보기 (2) | 2022.10.26 |
[graphviz] 그래프 구성 요소 꾸미기 (feat. graph, node, edge) (2) | 2022.10.25 |
댓글