연구실의 동료가 소개해준 색상에 대한 선택인데, 몇 번 사용해보고는 의외로 그 품질이 마음에 들어서 여전히 사용하고 있습니다. 다음 공식 홈페이지 (https://www.fabiocrameri.ch/colourmaps/ )에 언급되어 있듯이 해당 색상 지도는 다음과 같은 두가지를 주안점으로 만들어졌습니다.
- 색상 구배가 균질합니다: 이는 단순히 색상을 보여주는 RGB번호를 균질하게 하는것이 목표가 아니라, 사람의 일반적인 눈으로 바라보았을때 색상값의 변화가 변함에 따라 우리의 시각적 정보에서도 비교적 같은 스케일로 변할수 있도록 고안되어 있습니다.
- 조금 더 색맹이나 색을 느끼기 힘든 사람을 배려하였습니다. 또한 흑백으로 인쇄하게 되더라도 구분을 가능하도록 색상을 구성했습니다.
자세한 사항과, 각종 설명 및 시청각 자료는 저자의 사이트에서 참조할 수 있습니다. 여기에서는, 해당 색상지도를 Python환경에서 어떻게 사용할것인가에 주안점을 두고 있습니다. 저는 cmcrameri 패키지 ( https://github.com/callumrollo/cmcrameri.git )를 설치해서 진행했습니다.
python -m pip install cmcrameri
일반적으로 사용하기 위해서는 cmcrameri를 불러 온 다음에, color map을 사용하는 방법으로 다음을 이용합니다.
from cmcrameri import cm
Ndat = 5 # 데이터 숫자를 의미합니다
colP = cm.batlow(linspace(0.2, 0.8, Ndat))
저는 color map을 사용할때 linspace를 주로 사용하는데, 편하게 “jet” color-map을 사용할때는 cmap=plt.get_cmap(‘jet’)라고 설정한 다음에 colP = cmap(linspace(0, 1., Ndat))를 활용합니다. 위에는 cmap을 cmcrameri패키지의 “batlow”가 기존의 “jet”대신에 사용된 경우라 할 수 있습니다. 다만 숫자 batlow에서 숫자를 0.2에서 0.8로 제한 한 것은, 제 개인적으로 색상을 조금 더 선명하게 구분하고 싶어서 그런것이지, 실제로는 0에서 1까지 스케일이 움직입니다. 예시로 batlow와 jet을 비교하면 다음과 같습니다 (slide를 당겨서 두 색상을 비교할 수 있습니다)


batlow를 사용한 전체 코드는 다음과 같습니다.
from numpy import *
import matplotlib.pyplot as plt
from cmcrameri import cm
t_arr = logspace(-2, 2, 40)
tau_arr = [16.0, 8.0, 4.0, 2.0, 1.0]
lab_arr = []
for tau in tau_arr:
lab_arr.append(fr'$\tau$={tau:4.0f}')
Ndat = len(tau_arr)
colP = cm.batlow(linspace(0.2, 0.8, Ndat))
plt.close()
plt.ion()
plt.figure(figsize=(8,6))
cnt = 0;
plt.plot(t_arr, exp(-t_arr/tau_arr[cnt]), 'o-', c=colP[cnt], lw=1, label=lab_arr[cnt]); cnt += 1
plt.plot(t_arr, exp(-t_arr/tau_arr[cnt]), 'o-', c=colP[cnt], lw=1, label=lab_arr[cnt]); cnt += 1
plt.plot(t_arr, exp(-t_arr/tau_arr[cnt]), 'o-', c=colP[cnt], lw=1, label=lab_arr[cnt]); cnt += 1
plt.plot(t_arr, exp(-t_arr/tau_arr[cnt]), 'o-', c=colP[cnt], lw=1, label=lab_arr[cnt]); cnt += 1
plt.plot(t_arr, exp(-t_arr/tau_arr[cnt]), 'o-', c=colP[cnt], lw=1, label=lab_arr[cnt]); cnt += 1
plt.xlabel(r'$t$', fontsize=15)
plt.ylabel(r'$f(t)$', fontsize=15)
plt.legend(loc='lower left', fontsize=15, title='characteristic time')
plt.xscale('log')
plt.tick_params(labelsize=15)
plt.savefig('test_figure.jpg', bbox_inches='tight', dpi=300)
plt.show()
Leave a Reply