【问题标题】:Rearranging groupings in bar chart from pandas dataframe从熊猫数据框中重新排列条形图中的分组
【发布时间】:2017-02-07 06:49:39
【问题描述】:

我想要一个分组条形图,但默认图没有我想要的分组方式,我正在努力正确地重新排列它们。

数据框如下所示:

用户年份 cat1 cat2 cat3 cat4 cat5 0 布拉德 2014 309 186 119 702 73 1 布拉德 2015 280 177 100 625 75 2 布拉德 2016 306 148 127 671 74 3 布赖恩 2014 298 182 131 702 73 4 布赖恩 2015 295 125 117 607 76 5 布赖恩 2016 298 137 97 596 75 6 克里斯 2014 309 171 111 654 72 7 克里斯 2015 251 146 105 559 76 8 克里斯 2016 231 130 105 526 75 等等

在其他地方,代码生成两个变量,user1 和 user2。我想生成一个条形图,比较这两个用户在 cat1、cat2 和 cat3 中随时间变化的数字。例如,如果 user1 和 user2 是 Brian 和 Chris,我想要一个看起来像这样的图表:

在美学方面:我更希望年份标签是垂直文本或适合单行的字体大小,但目前让我感到困惑的是数据框枢轴。

【问题讨论】:

  • 您希望这些条形如上图所示进行分组,还是希望它们具有备用组?
  • 以上是我的理想(除了年份标签上的丑陋冲突)。

标签: python pandas matplotlib


【解决方案1】:

选择您要针对的用户子集。稍后使用pivot_tableDF 转换为所需的格式,通过转置和拆叠将其绘制。

import matplotlib.pyplot as plt

def select_user_plot(user_1, user_2, cats, frame, idx, col):
    frame = frame[(frame[idx[0]] == user_1)|(frame[idx[0]] == user_2)]
    frame_pivot = frame.pivot_table(index=idx, columns=col, values=cats).T.unstack()
    frame_pivot.plot.bar(legend=True, cmap=plt.get_cmap('RdYlGn'), figsize=(8,8), rot=0)

最后,

选择要包含在条形图中的用户和类别。

user_1 = 'Brian'
user_2 = 'Chris'
cats = ['cat1', 'cat2', 'cat3']

select_user_plot(user_1, user_2, cats, frame=df, idx=['user'], col=['year'])

注意:这接近于 OP 发布的情节。(年份显示为图例而不是刻度标签)

【讨论】:

  • 非常感谢。我用支点和拆叠把事情搞得一团糟;感谢您的帮助。
  • 这里也一样。我花了一段时间才完全弄清楚。
猜你喜欢
  • 2017-04-18
  • 2022-06-13
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多