matplotlib colormap

colormap에 대한 설명을 찾기가 어렵다.
자세하게 설명을 붙여서 정리하고 싶은데, colormap 사용법은 많은데 설명은 없다.
matplotlib 소스코드를 분석하는 중에
colormap을 알아야 하는 상황에 처하게 되서 부족하지만 정리해 본다.


내가 생각할 때는
숫자를 색상에 매핑시키기 위한 색상 지도이다.
다만 테이블처럼 2차원 형태가 아니라 30cm 자와 같이 1차원 형태의 색상 배열이다.

갖고 있는 데이터를 그래프에 표시할 때
일반적인 색상을 사용해서 표시하는 것은 의미가 없다.
데이터를 색상으로 표현하는 것은 말이 되지 않는다.
그러나, 잘 정리된 colormap을 사용한다면 시각적으로 엄청난 효과를 거둘 수 있다.

가령, 지구를 평균 기온에 따라 표현한다고 했을 때
추운 지역은 파란색으로, 더운 지역은 빨간색으로 표시할 수 있다.
결국 지구상의 모든 영역은 파랑과 빨강이 연결된 그라데이션에 포함된 어떤 색상이 된다.
이와 같이 특정 데이터에 대해 사용될 수 있는 색상표를 colormap이라고 부른다.


# matplotlib 도움말


# 과학 데이터를 표시하기에 적합한 colormap 모음.
미국 지도에 인구 밀도에 따른 색상으로 표시한 그래픽은 압권.


# colormap 한글 설명.
많은 설명은 아니지만, 일부 매핑에 대해 상세한 설명을 제공한다.


아래 코드는 matplotlib 홈페이지에서 제공하는 colormap을 표시하는 코드로
구글링으로 나오는 코드 중에서 가장 간결하고 단순한 코드이다.
약간의 코드를 수정했고, 몰랐던 부분에 대해 주석을 붙였다.

import numpy as np
import matplotlib.pyplot as plt

a = np.linspace(0, 1, 256).reshape(1, -1) # (1, 256)
a = np.vstack((a,a)) # (2, 256)

# colormap 목록 표시. '_r'로 끝나는 이름은 reverse 버전.
maps = sorted(m for m in plt.cm.datad if not m.endswith('_r'))
nmaps = len(maps) + 1
print(*maps, sep='\n')

fig = plt.figure(figsize=(5, 10))
fig.subplots_adjust(top=0.99, bottom=0.01, left=0.2, right=0.99)

for i, m in enumerate(maps, 1):
ax = plt.subplot(nmaps, 1, i)
plt.axis("off") # 가로축과 세로축에 표시되는 숫자 및 테두리 제거

plt.imshow(a, aspect='auto', cmap=plt.get_cmap(m), origin='lower')

# subplot 영역 계산. x, 너비, 높이는 같고, y만 바뀜.
bounds = list(ax.get_position().bounds)
x, y, cx, cy = bounds

# y축에 출력되는 colormap 이름이 y축에 달라붙지 않도록 간격 띄움.
# 정렬(left, center, right)은 x 좌표가 왼쪽, 가운데, 오른쪽에 있음을 명시하는 것임.
# right를 줬다면 출력 문자열의 오른쪽에 x 좌표가 오게 된다.
fig.text(x - 0.01, y, m, fontsize=10, horizontalalignment='right')

plt.show()

'파이썬' 카테고리의 다른 글

enum 클래스  (0) 2017.04.09
구조체로 사용할 수 있는 collections.namedtuple  (0) 2017.04.09
defaultdict 사용법  (0) 2017.04.06
정규분포와 누적분포 비교 그래프  (0) 2017.04.06
defaultdict와 딕셔너리 응용 코드  (0) 2017.04.06