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

[Matplotlib] 한 라인에 여러 색상 적용하기 (feat. LineCollection)

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

안녕하세요~ 꽁냥이에요. 보통 선 그래프에서 라인 하나에는 하나의 색을 갖게 되는 것이 일반적인데요. 가끔씩 특정 구간 별로 색을 다르게 하는 것처럼 라인 하나에 여러 색상을 적용할 수도 있을 것입니다. 따라서 이번 포스팅에서는 Matplotlib에서 라인 하나에 여러 색상을 적용하는 방법을 소개하려고 합니다.


   한 라인에 여러 색상 적용하기 (feat. LineCollection)

한 라인에 여러 색상을 적용하는 방법은 아래의 2단계를 거치면 됩니다.

 

1 단계) 라인 하나를 색상을 적용할 단위로 나눈다.

2 단계) 1 단계에서 나뉜 라인들을 LineCollection 클래스에 segments인자에 넘겨주고 color인자에 라인 개수만큼 색상을 리스트에 담아서 넘겨준다.

3 단계) add_collection 메서드를 통해 2 단계에서 정의한 LineCollection 클래스를 등록한다.

 

아래 코드는 LineCollection를 통해 라인 하나에 3가지 색상을 (번갈아가면서) 적용한 것입니다. 위에서 소개한 3 단계 과정이 코드 어느 부분에서 수행되고 있는지 살펴보시면 좋을 듯합니다. 코드 설명은 주석을 참고해주세요.

 

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus'] = False

from matplotlib.collections import LineCollection

## 데이터 생성
np.random.seed(100)
size = 10
x = np.arange(size)
y = np.random.randint(0, 8, size)

## x, y 좌표 데이터
points = np.array([x, y]).T.reshape(-1, 1, 2)

## 1 단계) 라인 하나를 색상을 적용할 단위로 나눈다.
segments = np.concatenate([points[:-1], points[1:]], axis=1) 

## 라인 컬렉션
## 2 단계) 1 단계에서 나뉘어진 라인들을 
## LineCollection 클래스에 segments인자에 넘겨주고 
## color인자에 라인 개수만큼 색상을 리스트에 담아서 넘겨준다.
lc = LineCollection(segments=segments, color=['r', 'g', 'b']*3, linewidth=1)
fig = plt.figure(figsize=(10,8))
fig.set_facecolor('white')
ax = fig.add_subplot()
## 3 단계) add_collection 메서드를 통해 2 단계에서 정의한 LineCollection 클래스를 등록한다.
ax.add_collection(lc)
## x, y축 상한, 하한 설정
ax.set_xlim(x.min(), x.max())
ax.set_ylim(y.min()-1, y.max()+1)
plt.show()

 

코드를 실행하면 아래 그림처럼 한 라인에 여러 색상이 적용된 것을 알 수 있습니다.

 


이번 포스팅에서는 Matplotlib LineCollection을 이용하여 한 라인에 여러 색상을 적용하는 방법을 알아보았습니다. 사실 이번 내용은 잘 사용되지는 않지만 가끔씩 필요할 때 그 방법을 몰라서 헤맬 수 있는데요. 그때 이 포스팅이 도움이 되셨으면 합니다~


댓글


맨 위로