如何将Viridis色映射应用于条形图,使Y轴值匹配色条
用Viridis色映射匹配数值给条形图上色的解决方案
没问题!要让你的4个条形图颜色和现有viridis色映射的色条精准对应,完全可以实现——核心思路就是把每个条形的Y轴数值直接映射到viridis的颜色空间里,这样数值高低就能和色条的色调一一匹配上。下面我用Python matplotlib(看你用到了色映射,大概率用的是这个库)给你一步步演示:
- 第一步:导入所需的库
import matplotlib.pyplot as plt import numpy as np from matplotlib.cm import viridis from matplotlib.colors import Normalize
- 第二步:准备你的条形数据
把这里的bar_values替换成你实际要用来画4个条形的Y轴数值就行,比如从你的大矩阵里提取的目标值:
# 示例:替换成你自己的4个条形数值 bar_values = [12, 28, 35, 41] bar_labels = ["条形1", "条形2", "条形3", "条形4"]
- 第三步:将数值映射到Viridis色空间
关键是用Normalize把你的数值范围归一化到viridis色映射的0-1区间,如果要和你之前的图表色条完全对齐,记得用和之前图表一样的vmin和vmax值:
# 如果你想和原矩阵的全局数值范围对齐,就用矩阵的min和max norm = Normalize(vmin=np.min(matrix), vmax=np.max(matrix)) # 如果你只想针对这4个条形的数值范围,就用: # norm = Normalize(vmin=np.min(bar_values), vmax=np.max(bar_values)) # 给每个数值匹配对应的viridis颜色 bar_colors = viridis(norm(bar_values))
- 第四步:绘制带对应颜色的条形图并添加色条
fig, ax = plt.subplots() # 绘制带自定义颜色的条形图 bars = ax.bar(bar_labels, bar_values, color=bar_colors) # 添加和原图表一致的色条,让颜色和数值对应关系更清晰 sm = plt.cm.ScalarMappable(cmap='viridis', norm=norm) sm.set_array([]) # 这一步是必要的,让ScalarMappable能正确生成色条 fig.colorbar(sm, ax=ax, label="Y轴数值") plt.title("Viridis色映射匹配数值的条形图") plt.show()
小提示:如果你用的是Seaborn库,思路也是一样的——用
sns.color_palette("viridis", as_cmap=True)获取色映射,再用同样的归一化方法给数值匹配颜色就可以啦。
内容的提问来源于stack exchange,提问作者Alessandro Peca
相关产品推荐
相关产品推荐

