我一直在努力使用matlplotlib在python中重新创建这个Excel图表:
数据在 Dataframe 中;我正在尝试自动化生成这个图表的过程。
我试过拆分数据框,绘制子图,但我没能创建Excel中的"Zone"索引。我成功地绘制了没有"Zone"索引的图形,但这不是我真正想做的。
下面是我的代码:
data = pd.DataFrame(
{
'Factory Zone':
["AMERICAS","APAC","APAC","APAC","APAC","APAC","EMEA","EMEA","EMEA","EMEA"],
'Factory Name':
["Chocolate Factory","Crayon Factory","Jobs Ur Us", "Gibberish US","Lil Grey", "Toys R Us","Food Inc.",
"Pet Shop", "Bonbon Factory","Carrefour"],
'Production Day 1':
[24,1,9,29,92,79,4,90,42,35],
'Production Day 2':
[2,43,17,5,31,89,44,49,34,84]
})
df = pd.DataFrame(data)
print(df)
# Without FactoryZone, it works:
df = df.drop(['Factory Zone'], axis=1)
image = df.plot(kind="bar")
数据如下所示:
Unnamed: 0 FactoryZone Factory Name Production Day 1 Production Day 2
0 1 AMERICAS Chocolate Factory 24 43
1 2 AMERICAS Crayon Factory 1 17
2 3 EMEA Pet Shop 9 5
3 4 EMEA Bonbon Factory 29 31
4 5 APAC Lil Grey 92 89
5 6 AMERICAS Jobs Ur Us 79 44
6 7 APAC Toys R Us 4 49
7 8 EMEA Carrefour 90 34
8 9 AMERICAS Gibberish US 42 84
9 10 APAC Food Inc. 35 62
3条答案
按热度按时间2nc8po8w1#
您可以通过首先为分层数据集创建MultiIndex来创建此图,其中 level 0 是 Factory Zone,level 1 是 Factory Name:
第一个
就像Quang Hoang提出的那样,可以为每个区域创建一个子图,然后将它们粘在一起。每个子图的宽度必须根据工厂的数量进行修正,方法是使用
gridspec_kw
字典中的width_ratios
参数,以便所有列都具有相同的宽度。然后可以进行无限的格式选择。在下面的示例中,我选择仅在区域之间显示分隔线,为此使用了次要刻度线。此外,由于此处的图形宽度仅限于10英寸,因此我将较长的标签重写为两行。
参考文献:Quang Hoang的答案,this answer by gyx-hh
kxxlusnw2#
给出封闭图的一个想法是在一个子图中对彼此相邻放置的每个
Factory Zone
进行绘图:输出:
41ik7eoe3#
帕特里克FitzGerald提供的解决方案中有一行在Matplotlib 3.4中被弃用,并将在2个小版本中被删除。(我想把这作为一个评论而不是答案,但我还没有足够的声誉!)
变更:
至