【问题标题】:Difficulty grouping barchart using Python, Pandas and Matplotlib使用 Python、Pandas 和 Matplotlib 难以对条形图进行分组
【发布时间】:2019-03-12 22:08:53
【问题描述】:

我很难让 plot.bar 将条形组合在一起,就像我在数据框中对它们进行分组一样。数据框正确返回分组数据,但是,条形图为数据框中的每一行提供了一个单独的条形图。理想情况下,我下面代码中的所有内容都应该为每个部门组合 3-6 个条形图(Dept X 应该为每种类型组合在一起的条形图,然后将真/假计数作为 Y 轴)。

数据框:

dname             Type  purchased
Dept X       0     False        141
                   True         270
             1     False       2020
                   True        2604
             2     False       2023
                   True        1047

代码:

import psycopg2
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

 ##connection and query data removed

df = pd.merge(df_departments[["id", "dname"]], df_widgets[["department", "widgetid", "purchased","Type"]], how='inner', left_on='id', right_on='department')
df.set_index(['dname'], inplace=True)
dx=df.groupby(['dname', 'Type','purchased'])['widgetid'].size()
dx.plot.bar(x='dname', y='widgetid', rot=90)

【问题讨论】:

    标签: python-3.x pandas matplotlib


    【解决方案1】:

    如果没有更可重复的示例,我无法确定,但在绘图之前尝试unstacking 最内层的 MultiIndex dx

    dx.unstack().plot.bar(x='dname', y='widgetid', rot=90)
    

    我希望这会起作用,因为在绘制 DataFrame 时,每一列都成为图例条目,每一行成为水平轴上的一个类别。

    【讨论】:

    • 感谢您的建议。不幸的是,这会出错“KeyError:'dname'”。我将进一步研究 unstack 功能。
    • @ByRequest,如果您仍在寻找解决方案,我很想知道dx.head(10) 的确切输出(包括空格)。
    • dname 购买的类型 Department1 0 False 141 True 270 1 False 2020 True 2604 2 False 2023 True 1047 名称:widgetid,dtype:int64 --我也会将此添加到顶部的图像中我不相信我的格式会被保留。谢谢!
    • 更新 - 我用 Unstack() 玩了更多 - 它让我走到了一半。我现在在一个部门中有三个小组。所以 Departmentx, 0 给了我两个计数条; Departmentx, 1 给了我两个计数条 - 我只需要最后一块就可以将所有条按此特定部门分组。也许这是一个语法问题?截至目前,我使用的是 df.groupby(['sname','Type','purchased'])['widgetid'].size().unstack().plot(kind='bar',stacked =假)
    • 我认为问题出在必须绘制具有三个级别的 MultiIndex,而我的 df.unstack().plot() 方法仅适用于两个级别。这就是我对 pandas/matplotlib 绘图的知识限制的地方......也许这个问题及其相关问题可能会有所帮助:stackoverflow.com/questions/34248741/…
    猜你喜欢
    • 2014-05-11
    • 2019-12-27
    • 1970-01-01
    • 2019-03-10
    • 2014-05-03
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多