如何为Matplotlib水平条形图按数值设置红-绿渐变颜色?
水平条形图实现红-绿颜色渐变方案
核心实现步骤
- 利用matplotlib内置的
RdYlGn颜色映射(红-黄-绿渐变),完美匹配0(红)到10(绿)的数值范围 - 将评分值归一化到颜色映射的0-1取值区间,确保每个数值对应唯一渐变颜色
- 为每个条形单独设置对应颜色
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt import pandas as pd rating = [8, 4, 5, 6] objects = ('h', 'b', 'c', 'a') y_pos = np.arange(len(objects)) # 固定评分范围0-10,将数值归一化到颜色映射适配的0-1区间 norm = plt.Normalize(0, 10) # 根据归一化后的数值生成对应颜色,0对应红色,10对应绿色 colors = plt.cm.RdYlGn(norm(rating)) # 绘制带渐变颜色的水平条形图 plt.barh(y_pos, rating, align='center', alpha=0.8, color=colors) plt.yticks(y_pos, objects) plt.xlabel('评分') plt.title('评分水平条形图(红-绿渐变)') plt.show()
关键细节说明
plt.Normalize(0,10):强制以0-10为基准做归一化,即使你的数据没有覆盖全范围,也能保证颜色渐变逻辑统一plt.cm.RdYlGn(norm(rating)):生成与评分一一对应的RGB颜色数组,直接传入barh的color参数即可- 调整
alpha参数可控制条形透明度,让渐变效果更自然
该方案支持数千条数据的高效渲染,无需额外优化即可稳定运行。
内容的提问来源于stack exchange,提问作者Sadcow
相关产品推荐
相关产品推荐

