在Seaborn中排序分组条形图

1 投票
1 回答
2022 浏览
提问于 2025-06-18 04:07

我正在尝试弄清楚如何将seaborn的条形图按某个组进行分组,同时保持聚合的类别。比如,

我有一个这样的条形图:

plt.figure(figsize = (12, 7))
sns.barplot(x = 'x', y = 'y', hue = 'df_tag', data = col_df)

按类别分组的条形图

另外,我还想按橙色类别的大小对x轴进行排序,但又想保持类别的结构。(也就是说,如果x轴上的2有绿色、蓝色和橙色的条形,我希望这些组保持不变,但按橙色条形的大小从小到大排序)。

非常感谢任何帮助!

相关问题:

  • 暂无相关问题
暂无标签

1 个回答

1

要对列进行排序,可以按照以下步骤操作:

  • 先筛选出所有带有橙色标签的行
  • 然后根据y值进行排序
  • 使用排序后列表的索引来查找原始数据表中的对应行
  • 最后,提取这个重新排序的数据表中的x值
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

df = pd.DataFrame({'x': [1, 2, 2, 3, 3, 3, 4, 4, 5],
                   'y': [4, 3, 1, 2, 7, 2, 2, 4, -3],
                   't': [2, 2, 3, 1, 2, 3, 2, 3, 2]})

fig, axs = plt.subplots(ncols=2, figsize=(12, 7))
sns.barplot(x='x', y='y', hue='t', data=df, ax=axs[0])
sns.barplot(x='x', y='y', hue='t', data=df, order=df.iloc[df[df['t'] == 2]['y'].sort_values().index]['x'], ax=axs[1])

示例图

撰写回答