如何将Seaborn发散色板中心设为0实现Dataframe红绿渐变?
Pandas DataFrame 红-绿发散色阶锚定0的解决方案
你需要给Pandas DataFrame设置红-绿发散格式:小于0的数值显示红色(值越小红色越深),大于0的数值显示绿色(值越大绿色越深),但当前代码无法将色板中心锚定在0上。
你的原代码:
rdgn = sns.diverging_palette(h_neg=0, h_pos=112, s=68, l=50, sep=10,n=9, as_cmap=True) s = test.style.background_gradient(rdgn).set_precision(2)
输出截图:
解决办法
问题根源是background_gradient默认会根据DataFrame的整体数值范围映射色阶,不会自动把0作为中心。以下两种方案可以解决:
方案1:手动指定对称的vmin和vmax
如果数据的正负范围不对称,先计算数据中的最大绝对值,将vmin设为负的最大绝对值,vmax设为正的最大绝对值,强制色阶中心对齐0:
rdgn = sns.diverging_palette(h_neg=0, h_pos=112, s=68, l=50, sep=10, n=9, as_cmap=True) # 获取整个DataFrame的最大绝对值 max_abs_value = test.abs().max().max() s = test.style.background_gradient(cmap=rdgn, vmin=-max_abs_value, vmax=max_abs_value).set_precision(2)
方案2:使用center参数(推荐,Pandas 1.3.0+支持)
从Pandas 1.3.0版本开始,background_gradient新增了center参数,直接指定中心值为0即可,无需手动计算范围:
rdgn = sns.diverging_palette(h_neg=0, h_pos=112, s=68, l=50, sep=10, n=9, as_cmap=True) s = test.style.background_gradient(cmap=rdgn, center=0).set_precision(2)
这个方案会自动适配数据的正负范围,确保0对应色板的中间色调,小于0的数值向红色渐变,大于0的向绿色渐变,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Michael M
相关产品推荐
相关产品推荐

