본문 바로가기
데이터 분석/시각화

[Matplotlib] 한 라인에 컬러 맵(Color Map) 적용하기 (feat. LineCollection)

by 부자 꽁냥이 2022. 10. 30.

안녕하세요~ 꽁냥이에요. 이번 포스팅에서는 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 문서를 찾아보다가 라인에 컬러 맵 적용한 예제를 보게 되었고 이게 간지가 나서 소개하고 싶었습니다~ ㅎㅎ;

 

부디 이번 포스팅이 어떤 분께는 도움이 되시길 바라며 이상 포스팅 마치겠습니다.


댓글


맨 위로