【问题标题】:Is there a way to make proportional plot out of a python pandas series? [duplicate]有没有办法从 python pandas 系列中制作比例图? [复制]
【发布时间】:2021-03-26 01:08:53
【问题描述】:

各位python用户好。

好的,所以我有这个 pandas.core.series.Series 看起来像这样:

In [1]: ps
Out[1]: 
asdf-Day_00     0
fldk-Day_00     0
fsld-Day_00     6
               ..
gejw-Day_40     2
gefw-Day_40     8
Name: something, Length: 55383, dtype: category
Categories (12, object): ['0', '1', '2', '3', ..., '8', '9', '10', '11']

索引由'Day_00', 'Day_10', 'Day_20', 'Day_30', 'Day_40' 组成,前面带有任意字符串和破折号。 如上所示,值由 '0' ~ '11' 组成。

我想将这个熊猫系列制作成比例图,就像下面附加的 .png 文件一样(对不起,我想要做的事情没有详细说明,而只是附上了示例图)

比例图示例

【问题讨论】:

  • 可能重复 herehere。您的问题很笼统,如果您提出一些实际的代码尝试或具体问题,我们或许可以更好地为您提供帮助。
  • 但是,类别是什么仍然难以捉摸。名称的 asdf 部分和 y 值是否为 0?鉴于这些类别似乎没有重复,这将是一个相当繁忙的传说。

标签: python python-3.x pandas plot


【解决方案1】:

不太清楚你有什么数据,请在以后提供。在这里尽我所能重新创建您的系列:

np.random.seed(123)
days= ['Day_00', 'Day_10', 'Day_20', 'Day_30', 'Day_40']
prefix = ['asdf','fldk','fsld','gejw','gefw']
idx = [i + "-" + j for j in days for i in prefix]

ps = pd.Series(pd.Categorical(np.random.randint(0,11,len(idx))),index=idx)

看起来像这样:

asdf-Day_00     2
fldk-Day_00     2
fsld-Day_00     6
gejw-Day_00     1
gefw-Day_00     3
asdf-Day_10    10
fldk-Day_10     9
fsld-Day_10     6
gejw-Day_10     1

我们在您的索引上使用交叉表和替换的组合:

ax = pd.crosstab(ps,ps.index.str.replace("[^ ]*-",""),normalize=0).plot.bar(stacked=True)
ax.legend(loc='lower center',bbox_to_anchor=(0.5, -0.3),ncol=5)

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 2010-10-18
    • 1970-01-01
    • 2022-12-05
    • 2020-06-21
    • 2020-04-13
    相关资源
    最近更新 更多