如何基于颜色映射(Colormap)为Jupyter Notebook中的柱状图按值着色?
实现柱状图按0-1数值匹配Colormap着色
核心方案
利用Matplotlib的颜色映射工具,将每个柱子对应的0-1浮点值直接映射为对应颜色,把颜色列表传给柱状图的color参数,最后添加匹配的颜色条即可。
完整代码示例
# Jupyter环境下确保图形内嵌显示 %matplotlib inline import matplotlib.pyplot as plt import matplotlib.cm as cm from matplotlib.colors import Normalize # 准备数据 labels = ['柱1', '柱2', '柱3', '柱4'] heights = [10, 15, 12, 18] # 柱子高度 x_values = [0.2, 0.6, 0.8, 0.3] # 每个柱子对应的0-1数值 # 选择颜色映射(可替换为其他colormap,比如'plasma'、'coolwarm') cmap = cm.viridis # 归一化数值(x已在0-1区间时可省略,保留适配更广泛场景) norm = Normalize(vmin=0, vmax=1) # 生成每个x对应的颜色 colors = [cmap(norm(x)) for x in x_values] # 绘制柱状图 fig, ax = plt.subplots() ax.bar(labels, heights, color=colors) # 添加颜色条 sm = cm.ScalarMappable(norm=norm, cmap=cmap) sm.set_array([]) # 仅用于关联颜色条,无需传入数据 fig.colorbar(sm, ax=ax, label='数值映射') ax.set_ylabel('柱子高度') plt.show()
关键说明
- 颜色转换:
cmap(norm(x))会将0-1区间的数值转换成Colormap对应的RGBA颜色值,直接作为柱子的颜色参数。 - 颜色条关联:
ScalarMappable用于绑定颜色映射与颜色条,确保颜色条刻度和柱子颜色一一对应。 - 自定义Colormap:把
cm.viridis替换为你需要的Colormap名称即可,比如cm.coolwarm、cm.plasma都适用。
如果之前尝试失败,大概率是未正确将数值映射为颜色列表,或是没把颜色条与Colormap关联起来。上述代码在Jupyter Notebook中直接运行就能得到目标效果。
内容的提问来源于stack exchange,提问作者MennovG
相关产品推荐
相关产品推荐

