当使用颜色图set_over
和set_under
方法选择将出现在颜色栏扩展中的超出范围值的颜色时,只能选择一种颜色。我正在寻找一种解决方法,以便能够在颜色栏扩展中显示颜色渐变。例如,我创建的颜色条的最后一种颜色是浅粉色,扩展部分是统一的红色。我想要的是一个以相同的浅粉色开始并逐渐变成红色的扩展。
这是我使用的代码:
import matplotlib as mpl
from matplotlib.backends.backend_agg import FigureCanvasAgg
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.figure import Figure
# data
bounds = [0, 15, 25, 40]
style_color = [[247, 247, 247],
[5, 113, 176],
[146, 197, 222],
[244, 165, 130],
[202, 0, 32]]
# transform color rgb value to 0-1 range
color_arr = []
for color in style_color:
rgb = [float(value)/255 for value in color]
color_arr.append(rgb)
# normalize bound values
norm = mpl.colors.Normalize(vmin=min(bounds), vmax=max(bounds))
normed_vals = norm(bounds)
# create a colormap
cmap = LinearSegmentedColormap.from_list(
'my_palette',
list(zip(normed_vals, color_arr[:-1])),
N=256
)
cmap.set_over([color for color in color_arr[-1]])
cmap.set_under([color for color in color_arr[0]])
# create a figure
fig = Figure(figsize=(2, 5))
canvas = FigureCanvasAgg(fig)
ax = fig.add_subplot(121)
# create the colorbar
cb = mpl.colorbar.ColorbarBase(ax,
cmap=cmap,
norm=norm,
extend='max',
ticks=bounds)
fig.savefig('colorbar_extensions')
结果颜色条:
我认为cmap.set_over
和cmap.set_under
方法旨在突出严格的截止值,即“突出显示在一种特定颜色中过高的每个值,例如红色”。
如果我理解正确,您希望您的颜色条具有朝向高于特定阈值的值的渐变,因此只需将阈值添加到您的边界:
# data
bounds = [0, 15, 25, 40, 45] # <- "45" is new here
style_color = [[247, 247, 247],
[5, 113, 176],
[146, 197, 222],
[244, 165, 130],
[202, 0, 32],
[255, 0, 0]] # <- the mapped color for the boundary "45" is [r,g,b] red.
现在,您需要cmap.set_over([color for color in color_arr[-1]])
通过使用ticks=bounds[:-1]
.
产量:
注意:您可能希望选择这个“值高于阈值”点接近 40(例如 41),这样颜色条在顶部看起来不会那么“拉伸”,但是这会压缩渐变太多以至于它几乎看起来又像你原来的情节了。在这种情况下,您需要指定不同的红色色调作为阈值颜色。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句