为 matplotlib 颜色图设置颜色限制
Set color limits for matplotlib colormap
我做了一个函数来获取一组数据的十六进制代码如下:
from matplotlib import cm, colors
def get_color(series_data, cmap='Reds'):
color_map = cm.get_cmap(cmap, 20)
f = lambda x: colors.rgb2hex(color_map(x/series_data.max())[:3])
return series_data.apply(f)
cm.get_cmap(cmap, 20)
生成一个 matplotlib.colors.LinearSegmentedColormap 对象,范围从输入的最小值 series_data
到最大值。
我看不出如何定义要评估的数据的颜色限制。例如,如果我想设置恒定的颜色限制,定义最小值 0 和最大值 100 怎么办?我怎么能在我的职能范围内做到这一点?
我试图用series_data.max()
代替100
来控制最大等效颜色(max),但我无法控制cmin。
color_map
的参数需要缩放到[0.,1.)范围内。例如,如果需要获取lo
(hi
)值的最小(最大)颜色值:
from matplotlib import cm, colors
import pandas as pd
def get_color(series_data, cmap='Reds', lo=None, hi=None):
if lo is None:
lo = series_data.min()
if hi is None:
hi = series_data.max()
if lo == hi:
raise Exception('Invalid range.')
color_map = cm.get_cmap(cmap, 20)
f = lambda x: colors.rgb2hex(color_map((x-lo)/(hi-lo))[:3])
return series_data.apply(f)
s = pd.Series(np.linspace(0,3,16))
colz = get_color(s, lo=1, hi=2)
for x, c in zip(s, colz):
print('{:.2f} {}'.format(x,c))
示例输出为
0.00 #fff5f0
0.20 #fff5f0
0.40 #fff5f0
0.60 #fff5f0
0.80 #fff5f0
1.00 #fff5f0
1.20 #fdc7b0
1.40 #fc8363
1.60 #ed392b
1.80 #af1117
2.00 #67000d
2.20 #67000d
2.40 #67000d
2.60 #67000d
2.80 #67000d
3.00 #67000d
我做了一个函数来获取一组数据的十六进制代码如下:
from matplotlib import cm, colors
def get_color(series_data, cmap='Reds'):
color_map = cm.get_cmap(cmap, 20)
f = lambda x: colors.rgb2hex(color_map(x/series_data.max())[:3])
return series_data.apply(f)
cm.get_cmap(cmap, 20)
生成一个 matplotlib.colors.LinearSegmentedColormap 对象,范围从输入的最小值 series_data
到最大值。
我看不出如何定义要评估的数据的颜色限制。例如,如果我想设置恒定的颜色限制,定义最小值 0 和最大值 100 怎么办?我怎么能在我的职能范围内做到这一点?
我试图用series_data.max()
代替100
来控制最大等效颜色(max),但我无法控制cmin。
color_map
的参数需要缩放到[0.,1.)范围内。例如,如果需要获取lo
(hi
)值的最小(最大)颜色值:
from matplotlib import cm, colors
import pandas as pd
def get_color(series_data, cmap='Reds', lo=None, hi=None):
if lo is None:
lo = series_data.min()
if hi is None:
hi = series_data.max()
if lo == hi:
raise Exception('Invalid range.')
color_map = cm.get_cmap(cmap, 20)
f = lambda x: colors.rgb2hex(color_map((x-lo)/(hi-lo))[:3])
return series_data.apply(f)
s = pd.Series(np.linspace(0,3,16))
colz = get_color(s, lo=1, hi=2)
for x, c in zip(s, colz):
print('{:.2f} {}'.format(x,c))
示例输出为
0.00 #fff5f0
0.20 #fff5f0
0.40 #fff5f0
0.60 #fff5f0
0.80 #fff5f0
1.00 #fff5f0
1.20 #fdc7b0
1.40 #fc8363
1.60 #ed392b
1.80 #af1117
2.00 #67000d
2.20 #67000d
2.40 #67000d
2.60 #67000d
2.80 #67000d
3.00 #67000d