Python seaborn库histplot堆叠柱状图如何调整堆叠顺序且保持颜色对应
seaborn histplot堆叠顺序调整方案
你可以通过固定颜色映射+指定hue_order参数实现需求,修改后的完整代码如下:
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt group = np.repeat(['G1', 'G2'], 4) value = np.array(['1', '2', '3', '4', '1', '2', '3', '4']) percentage = np.array([20, 10, 40, 30, 50, 25, 20, 5]) stacked = pd.DataFrame({'Group':group, 'Value':value, 'Percentage':percentage}) # 预先为每个Value值固定对应颜色,避免调整顺序后颜色错乱 value_unique = stacked['Value'].unique() fixed_palette = dict(zip(value_unique, sns.color_palette('colorblind', len(value_unique)))) # 新增hue_order参数指定堆叠顺序:按1→2→3→4从底部到顶部堆叠 sns.histplot(stacked, x = 'Group', hue = 'Value', weights = 'Percentage', multiple = 'stack', palette = fixed_palette, shrink = 0.75, hue_order = ['1', '2', '3', '4']) # 图例保持原有反转逻辑,和堆叠从上到下的顺序一一对应 plt.legend(labels = value_unique[::-1], bbox_to_anchor = (1, 1), fontsize = 8) plt.show()
关键修改点说明
- 先构建
Value到颜色的映射字典,保证不管堆叠顺序怎么调整,每个Value对应的颜色和原设置完全一致 - 给
histplot添加hue_order参数,参数值按你需要的堆叠顺序从底部到顶部排列,此处设置为['1', '2', '3', '4']即可实现1在最底部、4在最顶部的效果 - 图例部分保留原有反转逻辑,保证图例从上到下的条目和图表中从上到下的堆叠区块一一对应
内容的提问来源于stack exchange,提问作者RamsesII
相关产品推荐
相关产品推荐

