从pandas datafram重新排列条形图中的分组

2024-04-25 12:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想重新排列图表,但我不想把它们分组。在

数据帧如下所示:

     user  year  cat1  cat2  cat3  cat4  cat5
0    Brad  2014   309   186   119   702    73
1    Brad  2015   280   177   100   625    75
2    Brad  2016   306   148   127   671    74
3   Brian  2014   298   182   131   702    73
4   Brian  2015   295   125   117   607    76
5   Brian  2016   298   137    97   596    75
6   Chris  2014   309   171   111   654    72
7   Chris  2015   251   146   105   559    76
8   Chris  2016   231   130   105   526    75
etc

在其他地方,代码生成两个变量user1和user2。我想制作一个条形图,比较这两个用户在cat1、cat2和cat3中的数据。例如,如果user1和user2是Brian和Chris,我需要一个如下所示的图表:

grouped bar chart

从美学的角度来说:我希望年份标签是垂直文本或者适合一行的字体大小,但目前让我感到困惑的是数据帧轴(dataframe pivot)。在


Tags: 数据图表etcyearchrisbrianuseruser1
1条回答
网友
1楼 · 发布于 2024-04-25 12:40:40

选择要绘制的用户子集。稍后使用^{}DF转换为所需的格式,以便通过转置和取消堆叠来绘制。在

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)

最后

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

^{pr2}$

Image

注:这与OP发布的图很接近(年份显示为图例,而不是勾号标签)

相关问题 更多 >

    热门问题