gpt4 book ai didi

python - pandas(水平)堆叠条形,每个条形段排序

转载 作者:行者123 更新时间:2023-12-01 01:56:29 27 4
gpt4 key购买 nike

我可以使用以下代码从多索引数据帧生成水平堆叠条形:

arrays = [np.array(['bar', 'bar', 'bar', 'baz', 'baz', 'baz', 'foo', 'foo', 'foo', 'qux', 'qux', 'qux']),
np.array(['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve'])]

s = abs(pd.Series(np.random.randn(12), index=arrays))

ax = s.unstack(level=1).plot.barh(stacked=True, colormap='Paired')

plt.show()

这个输出

horizontal stacked bars

但我希望每个栏上的最大部分(无论类别如何)始终显示在栏的底部(ie.在左边)。我还没有找到任何能够实现这一目的的 barh() 参数,并且在考虑到 unstack 的情况下,在级别 0 上对 s 进行排序并没有帮助-ing。

最佳答案

由于数据帧非常稀疏,即每列只有一个值,因此您可以仅按该值对列进行排序。

import pandas as pd
import numpy as np; np.random.seed(42)
import matplotlib.pyplot as plt

arrays = [np.array(['bar', 'bar', 'bar', 'baz', 'baz', 'baz', 'foo', 'foo', 'foo', 'qux', 'qux', 'qux']),
np.array(['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve'])]

s = abs(pd.Series(np.random.randn(12), index=arrays))
df = s.unstack(level=1)
df = df[df.columns[np.argsort(df.sum())[::-1]]]
ax = df.plot.barh(stacked=True, colormap='Paired')

plt.show()

enter image description here

关于python - pandas(水平)堆叠条形,每个条形段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com