【发布时间】:2017-02-28 03:52:38
【问题描述】:
如何在同一张图表上绘制多个 DataFrame 条形图?
我想绘制前三名(或前五名)的分数。因为我知道 1st >= 2nd >= 3rd,所以我想将图表中的前三个(或五个)绘制在同一个柱上,而不是将它们分散在三个(或五个)柱上。
视觉效果将与堆叠的条形图完全相同,但条形图并非相互堆叠,而是从底部开始测量。
更新: @DizietAsahi 建议改用堆叠条。我想这是最简单的解决方案。有人可以提供数据框操作代码来获得以下分数的差异吗?
源数据为TID和Score的形式,就像下面的CSV格式的数据一样,已经被过滤掉了,只剩下前3名。对于相同的 TID,原始数据的分数要高得多。这样做的挑战在于,我还需要绘制 MEAN 分数以及前三名。即,我个人认为不可能同时操纵 MEAN 得分和前三名来获得下面的差异。所以任何一种方式都有挑战(对我来说)。
这是一个 CSV 格式的示例数据:
TID,Score
06,510
06,472
06,441
07,630
07,619
07,574
08,617
08,589
08,560
09,610
09,595
09,553
10,593
10,550
10,542
11,442
11,404
11,381
DataFrame 格式(仅适用于多个 DataFrame 条形图的情况。对于使用堆积条形图,为每个 TID 生成一堆随机数作为 Score 就可以了):
Scores = [
{"TID":07,"ScoreRank":1,"Score":834,"Average":690},
{"TID":07,"ScoreRank":2,"Score":820,"Average":690},
{"TID":07,"ScoreRank":3,"Score":788,"Average":690},
{"TID":08,"ScoreRank":1,"Score":617,"Average":571},
{"TID":08,"ScoreRank":2,"Score":610,"Average":571},
{"TID":08,"ScoreRank":3,"Score":600,"Average":571},
{"TID":09,"ScoreRank":1,"Score":650,"Average":584},
{"TID":09,"ScoreRank":2,"Score":644,"Average":584},
{"TID":09,"ScoreRank":3,"Score":618,"Average":584},
{"TID":10,"ScoreRank":1,"Score":632,"Average":547},
{"TID":10,"ScoreRank":2,"Score":593,"Average":547},
{"TID":10,"ScoreRank":3,"Score":577,"Average":547},
{"TID":11,"ScoreRank":1,"Score":479,"Average":409},
{"TID":11,"ScoreRank":2,"Score":445,"Average":409},
{"TID":11,"ScoreRank":3,"Score":442,"Average":409},
{"TID":12,"ScoreRank":1,"Score":370,"Average":299},
{"TID":12,"ScoreRank":2,"Score":349,"Average":299},
{"TID":12,"ScoreRank":3,"Score":341,"Average":299},
{"TID":13,"ScoreRank":1,"Score":342,"Average":252},
{"TID":13,"ScoreRank":2,"Score":318,"Average":252},
{"TID":13,"ScoreRank":3,"Score":286,"Average":252},
{"TID":14,"ScoreRank":1,"Score":303,"Average":257},
{"TID":14,"ScoreRank":2,"Score":292,"Average":257},
{"TID":14,"ScoreRank":3,"Score":288,"Average":257},
{"TID":15,"ScoreRank":1,"Score":312,"Average":242},
{"TID":15,"ScoreRank":2,"Score":276,"Average":242},
{"TID":15,"ScoreRank":3,"Score":264,"Average":242},
{"TID":16,"ScoreRank":1,"Score":421,"Average":369},
{"TID":16,"ScoreRank":2,"Score":403,"Average":369},
{"TID":16,"ScoreRank":3,"Score":398,"Average":369},
{"TID":17,"ScoreRank":1,"Score":479,"Average":418},
{"TID":17,"ScoreRank":2,"Score":466,"Average":418},
{"TID":17,"ScoreRank":3,"Score":455,"Average":418},
{"TID":18,"ScoreRank":1,"Score":554,"Average":463},
{"TID":18,"ScoreRank":2,"Score":521,"Average":463},
{"TID":18,"ScoreRank":3,"Score":520,"Average":463}]
df = pandas.DataFrame(Scores)
谢谢
【问题讨论】:
-
能否提供一个示例数据框?
-
@ShivamGaur,CSV 中的示例数据以及数据框格式现在可用。谢谢。
-
只需做一个堆积图,计算每个级别作为以下分数的差异
-
@DizietAsahi,是的,我想这是最简单的解决方案。您能否提供数据框操作代码来获得以下分数的差异?我可以接受这个作为答案。谢谢。
标签: python matplotlib dataframe charts bar-chart