【问题标题】:stacked barplot with total and edited axis limit - python具有总和编辑轴限制的堆叠条形图 - python
【发布时间】:2020-03-05 23:18:30
【问题描述】:

我正在尝试制作堆叠条形图,但使用seaborn 似乎非常棘手。我有这些数据:

x = pd.DataFrame({"Groups" : np.random.choice(["Group1", "Group2", "Group3"], 100),
                 "Sex" : np.random.choice(["Masculine", "Femenine"], 100)})
x = x.groupby(["Groups", "Sex"]).size().reset_index(name="count")
x["percent (%)"] = round(x.groupby("Groups").transform(lambda x: x/sum(x))*100,1)
x

我有这个情节:

sns.barplot(x="Groups", y="percent (%)", hue="Sex", data=x);

但是,我认为每个组都有一个堆叠条,y 轴从 0 到 1,以及一个总计的“group4”。当我尝试绘制像 here 这样的限制时,它给了我一个错误,因为这个 seaborn 图表不允许它,而且我发现 seaborn 的每个堆叠条形图每个组都有一个列,每个组的值在他各自的列,我将所有组放在一列中。有什么想法吗?

我正在寻找一个简单的解决方案(有或没有 seaborn)而不改变数据的结构(除了添加“总组”,但我不知道将总数添加到数据中是否更容易,或计算图中的总数)。

【问题讨论】:

  • seaborn 的创造者以自以为是而著称。 Here 是他对堆叠条形图的看法。

标签: python pandas matplotlib seaborn


【解决方案1】:

不确定group4 会是什么样子,这是一个堆叠的条形图:

x = pd.DataFrame({"Groups" : np.random.choice(["Group1", "Group2", "Group3"], 100),
                 "Sex" : np.random.choice(["Masculine", "Femenine"], 100)})

xf = x.groupby(["Groups"])['Sex'].value_counts().unstack('Groups')
xf['Total'] = xf.sum(1)
xf.div(xf.sum()).T.plot.bar(stacked=True)

输出:

【讨论】:

  • 这几乎解决了我的问题,但是 X 轴应该有组(当我这样做时它有效,但百分比总是 50%,你为什么要标准化?)。 “总组”只是另一个条形,其中是其他三个组的所有计数的总和。
  • 为什么?例如,group1 有 2 名男性 (20%) 和 8 名女性 (80%),group2 有 5 名男性 (50%) 和 5 名女性 (50%),总共有 7 名男性 (35%) 和 13 名女性 ( 65%)为“总组”。它符合 0-1 的比例。
  • 是的!我需要 X 轴作为组,以及代表男性和女性的条形百分比(就像我在问题中给出的情节一样,但堆叠在一起)
  • 它有效!但是,当数据框中没有 50% 时,所有堆叠的条都给了我 50%。这是我用来检查的完整代码:x = pd.DataFrame({"Groups" : np.random.choice(["Group1", "Group2", "Group3"], 1000), "Sex" : np.random.choice(["Masculine", "Femenine"], 1000)}) x = x.groupby(["Groups", "Sex"]).size().reset_index(name="count") x["percent (%)"] = round(x.groupby("Groups").transform(lambda x: x/sum(x))*100,3) display(x) xf = x.groupby(["Groups"])['Sex'].value_counts().unstack('Groups') xf['Total'] = xf.sum(1) xf.div(xf.sum()).T.plot.bar(stacked=True);
  • 不,我的代码适用于原始x。查看更新。
猜你喜欢
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2019-09-25
相关资源
最近更新 更多