답변:
아래 코드를 사용 하여이 작업을 수행 할 수 있으며 질문의 코드는 실제로 필요한 것에 매우 가깝습니다. 수행해야 할 것은 cmap
객체를 호출하는 것입니다.
import matplotlib
cmap = matplotlib.cm.get_cmap('Spectral')
rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)
[0.0, 1.0] 범위를 벗어난 값의 경우 언더 컬러와 오버 컬러를 각각 반환합니다. 기본적으로이 범위 내의 최소 및 최대 색입니다 (따라서 0.0 및 1.0). 이 기본값은 cmap.set_under()
및 로 변경할 수 있습니다 cmap.set_over()
.
기본값 np.nan
과 같은 "특수"숫자의 np.inf
경우 0.0 값을 사용하는 경우 cmap.set_bad()
위와 같이 위 / 아래와 유사 하게이 값을 변경할 수 있습니다 .
마지막으로 데이터가 범위에 맞도록 데이터를 정규화해야 할 수도 있습니다 [0.0, 1.0]
. 이것을 사용하여 수행 될 수 matplotlib.colors.Normalize
간단히 인수 여기서 아래 작은 예에 도시 vmin
및 vmax
수치는 각각 0.0과 1.0로 매핑되어야 하는지를 설명한다.
import matplotlib
norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)
print(norm(15.0)) # 0.5
로그 노멀 라이저 ( matplotlib.colors.LogNorm )는 넓은 범위의 값을 가진 데이터 범위에도 사용할 수 있습니다.
( Joe Kington 과 tcaswell 에게 답변을 개선하는 방법에 대한 제안을 주셔서 감사합니다 .)
set_bad
에 대한 무엇을 정의하는 np.nan
및 np.inf
IIRC. Normalize
여기에서도 방법을 언급해야 합니다.
module 'matplotlib' has no attribute 'cm'
import matplotlib.pyplot as plt; cmap = plt.cm.get_cmap('Spectral')
float 값 대신 rgba 정수 값을 얻으려면 다음을 수행하십시오.
rgba = cmap(0.5,bytes=True)
따라서 Ffisegydd의 답변을 기반으로 코드를 단순화하기 위해 코드는 다음과 같습니다.
#import colormap
from matplotlib import cm
#normalize item number values to colormap
norm = matplotlib.colors.Normalize(vmin=0, vmax=1000)
#colormap possible values = viridis, jet, spectral
rgba_color = cm.jet(norm(400),bytes=True)
#400 is one of value between 0 and 1000
Ffisegydd 및 amaliammr 의 솔루션을 기반 으로하는 사용자 지정 컬러 맵에 대한 CSV 표현의 예는 다음과 같습니다.
#! /usr/bin/env python3
import matplotlib
import numpy as np
vmin = 0.1
vmax = 1000
norm = matplotlib.colors.Normalize(np.log10(vmin), np.log10(vmax))
lognum = norm(np.log10([.5, 2., 10, 40, 150,1000]))
cdict = {
'red':
(
(0., 0, 0),
(lognum[0], 0, 0),
(lognum[1], 0, 0),
(lognum[2], 1, 1),
(lognum[3], 0.8, 0.8),
(lognum[4], .7, .7),
(lognum[5], .7, .7)
),
'green':
(
(0., .6, .6),
(lognum[0], 0.8, 0.8),
(lognum[1], 1, 1),
(lognum[2], 1, 1),
(lognum[3], 0, 0),
(lognum[4], 0, 0),
(lognum[5], 0, 0)
),
'blue':
(
(0., 0, 0),
(lognum[0], 0, 0),
(lognum[1], 0, 0),
(lognum[2], 0, 0),
(lognum[3], 0, 0),
(lognum[4], 0, 0),
(lognum[5], 1, 1)
)
}
mycmap = matplotlib.colors.LinearSegmentedColormap('my_colormap', cdict, 256)
norm = matplotlib.colors.LogNorm(vmin, vmax)
colors = {}
count = 0
step_size = 0.001
for value in np.arange(vmin, vmax+step_size, step_size):
count += 1
print("%d/%d %f%%" % (count, vmax*(1./step_size), 100.*count/(vmax*(1./step_size))))
rgba = mycmap(norm(value), bytes=True)
color = (rgba[0], rgba[1], rgba[2])
if color not in colors.values():
colors[value] = color
print ("value, red, green, blue")
for value in sorted(colors.keys()):
rgb = colors[value]
print("%s, %s, %s, %s" % (value, rgb[0], rgb[1], rgb[2]))
완전성을 위해 이것은 지금까지 만난 cmap 선택입니다.
Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrGd, Orr_ 오렌지, OrR_ PR PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, RsBud, RdBud, RdBu, RdBu, RdBu, RdBu RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGr, YlGrYlYrGlYrYlGnBuy afmhot_r, 가을, autumn_r, 이진, binary_r, 뼈, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm, coolwarm_r, 구리, copper_r, cubehelix, cubehelix_r, 플래그, flag_r, gist_earth, gist_earthgist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r,의 gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, 회색, gray_r, 뜨거운 hot_r, HSV, hsv_r, 파열, inferno_r, 제트 jet_r, 마그마, magma_r, nipy_spectral, nipy_spectral_r, 대양, ocean_r, 핑크, pink_r, 플라즈마, plasma_r, 프리즘, prism_r, rainbow, rainbow_r, 지진, 지진 _r, 봄, spring_r, 여름, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, 지형, 지형 _r, 황혼, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, 겨울, winter_rgray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, 핑크, pink_r, 플라즈마, plasma_r, 프리즘, 프리즘 _r, 무지개, rainbow_r, 지진, 지진, 지진 봄, spring_r, 여름, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, 지형, 터 레인 _r, 어스름, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, 겨울, winter_rgray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, 핑크, pink_r, 플라즈마, plasma_r, 프리즘, 프리즘 _r, 무지개, rainbow_r, 지진, 지진, 지진 봄, spring_r, 여름, summer_r, tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, 지형, 터 레인 _r, 어스름, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, 겨울, winter_rviridis, viridis_r, 겨울, winter_rviridis, viridis_r, 겨울, winter_r
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)