如何按降序排列堆叠条形图?

时间:2019-11-09 00:17:51

标签: python pandas numpy matplotlib

这是我按 State Category 分组后的数据框。我试图按每个州的记录总数 (组合所有三个类别)创建一个递减的堆叠条形图。我尝试在绘制前 sort_values ,因为这里有一个“按州总计”列。不幸的是,我无法找到一种方法来正确地对此进行排序。 enter image description here

我已经尝试了一些组合,但是现在在那个令人沮丧的阶段有点..感觉我可能对此过于复杂了。

bool MapGenerator::isValid(std::string line)  const {
    // irrelevant stuff
                if (line[i] == 'p') {
                    startCount++;
                }
                else if (line[i] == 'P') {
                    endCount++;
                }
        // irrelevant stuff
        return something;
我希望得到的结果是该数据帧具有相同的格式,只是“状态”列按记录总数按降序排序。例如,加利福尼亚将以技术:359 +家具:444 +办公用品:1198 = 2001最大。

(当前/未排序的堆积条形图看起来像这样:enter image description here

1 个答案:

答案 0 :(得分:2)

您可以通过计算每个状态的总和并从中获取索引来找到状态的顺序。使用此顺序为数据框重新索引,然后绘制。像这样:

# Create sample data
np.random.seed(0)
index = pd.MultiIndex.from_product([['WA', 'NC', 'NY', 'ME', 'NE', 'SD', 'CA'], ['Furniture', 'Technology', 'Office Supplies']], names=['State', 'Category'])
df = pd.DataFrame(np.random.random(21), index=index, columns=['value'])

# Find order and plot
sort_ix = df.groupby(level='State').sum().sort_values('value', ascending=False).index
df.reindex(sort_ix, level=0).unstack().plot.bar(stacked=True)

enter image description here