回答:
以下のコードでこれを行うことができ、質問のコードは実際には必要なものに非常に近かったので、必要なのは、持っている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
in np.nan
とnp.inf
iircの目的を定義するものもあります。Normalize
ここでもメソッドに言及する必要があります。
module 'matplotlib' has no attribute 'cm'
、最初の2行を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、OrRs、Ord、Orrd、OrRd、OrRd、OrRd、OrRd 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_Purples_r、RdrRdRdBu、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、YlGn、YlGnBur、YlGlBu、YlGn_r、YlGlBu、YlGn_r、YlGlBu、YlGn_r afmhot_r、autumn、autumn_r、binary、binary_r、bone、bone_r、brg、brg_r、bwr、bwr_r、cividis、cividis_r、cool、cool_r、coolwarm、coolwarm_r、copper、copper_r、cubehelix、cubehelix_r、flag、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、nog_rr、norvr、r、guprr、norvr、r、rupr、norr jet_r、magma、magma_r、nipy_spectral、nipy_spectral_r、ocean、ocean_r、pink、pink_r、plasma、plasma_r、prism、prism_r、rainbow、rainbow_r、seismic、seismic_r、spring、spring_r、summer、summer_r、tab10、tab10_r、tab20_r tab20b、tab20b_r、tab20c、tab20c_r、terrain、terrain_r、twilight、twilight_r、twilight_shifted、twilight_shifted_r、viridis、viridis_r、winter、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、pink_r、plasma、plasma_r、prism、prism_r、rainbow、rainbow_r、seismic spring、spring_r、summer、summer_r、tab10、tab10_r、tab20、tab20_r、tab20b、tab20b_r、tab20c、tab20c_r、terrain、terrain_r、twilight、twilight_r、twilight_shifted、twilight_shifted_r、viridis、viridis_r、winter、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、pink_r、plasma、plasma_r、prism、prism_r、rainbow、rainbow_r、seismic spring、spring_r、summer、summer_r、tab10、tab10_r、tab20、tab20_r、tab20b、tab20b_r、tab20c、tab20c_r、terrain、terrain_r、twilight、twilight_r、twilight_shifted、twilight_shifted_r、viridis、viridis_r、winter、winter、rviridis、viridis_r、winter、winter_rviridis、viridis_r、winter、winter_r
cmap.set_under('red'); print cmap(0.0), cmap(-0.01)