Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 컬러맵(컬러바) 색상 순서를 반전시키는 방법

Matplotlib로 데이터를 시각화하다 보면 컬러맵(colormap)의 색상 순서를 반대로 뒤집고 싶은 경우가 있습니다. 예를 들어 값이 클수록 진한 파란색 대신 연한 파란색으로 표현하고 싶을 때가 그렇습니다. 다행히 Matplotlib의 컬러맵 객체에는 reversed() 메서드가 내장되어 있어, 코드 한 줄만으로 손쉽게 색상 순서를 반전시킬 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변 여백을 조정합니다.
  • xy 배열을 이용해 데이터 포인트를 생성합니다.
  • get_cmap() 메서드로 'Blues' 계열의 컬러맵을 가져옵니다.
  • 현재 그림의 첫 번째 위치(인덱스 1)에 서브플롯을 추가합니다.
  • scatter() 메서드로 x, y 데이터를 산점도 형태로 플로팅합니다.
  • 스칼라 맵핑(ScalarMappable) 객체를 기반으로 컬러바를 생성합니다.
  • reversed()로 반전시킨 컬러맵을 적용하여 두 번째 산점도를 그립니다.
  • 두 개의 서브플롯 각각에 제목을 설정합니다.
  • show() 메서드를 호출해 최종 그림을 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

x = np.linspace(-2, 2, 10)
y = np.linspace(-2, 2, 10)

color_map = plt.cm.get_cmap('Blues')
plt.subplot(1, 2, 1)

sc = plt.scatter(x, y, c=x, cmap=color_map)
plt.colorbar(sc)

plt.title("Colorbar")
plt.subplot(1, 2, 2)
sc = plt.scatter(x, y, c=x, cmap=color_map.reversed())
plt.colorbar(sc)

plt.title("Reversed Colorbar")

plt.show()

출력 결과

Matplotlib에서 컬러맵(컬러바) 색상 순서를 반전시키는 방법

왼쪽 그래프는 기본 'Blues' 컬러맵을 적용한 결과이며, 오른쪽 그래프는 reversed() 메서드로 색상 순서를 반전시킨 결과입니다. 같은 데이터임에도 컬러바의 진하기가 정확히 반대로 표현되는 것을 확인할 수 있습니다.

참고 사항

Matplotlib 3.7 버전부터 plt.cm.get_cmap()은 더 이상 권장되지 않습니다(deprecated). 최신 버전을 사용한다면 아래와 같이 작성하는 것이 좋습니다.

color_map = plt.get_cmap('Blues')          # 방법 1
color_map = matplotlib.colormaps['Blues']  # 방법 2

이처럼 컬러맵 객체의 reversed() 메서드만 활용하면 별도의 커스텀 컬러맵을 만들 필요 없이 원하는 방향으로 색상 배치를 자유롭게 조절할 수 있습니다.