0

我正在尝试使用 matplotlib 和 pandas 创建一个包含多个子图的分组条形图。我可以根据数据帧的值手动定义图来创建它,但我想通过循环使其自动化。我尝试了很多方法来循环,但每次都会遇到一个或其他错误。作为编程和python的初学者,我迷路了。这是我的数据:sales3

我为获得预期输出而编写的代码:

sales3 = sales.groupby(["Region","Tier"])[["Sales2015","Sales2016"]].sum().round().astype("int64")
sales3.reset_index(inplace=True)
fig,(ax1,ax2,ax3) = plt.subplots(nrows=1,ncols=3,sharex=True,sharey=True,figsize=(10,6))
sales3[sales3["Region"]=="Central"].plot(kind="bar",x="Tier",y=["Sales2015","Sales2016"],ax=ax1)
ax1.set_title("Central")
sales3[sales3["Region"]=="East"].plot(kind="bar",x="Tier",y=["Sales2015","Sales2016"],ax=ax2)
ax2.set_title("East")
sales3[sales3["Region"]=="West"].plot(kind="bar",x="Tier",y=["Sales2015","Sales2016"],ax=ax3)
ax3.set_title("West")
plt.tight_layout()

输出: 预期输出

请指导我如何使用循环或任何自动方式编写它。比如说,我将来会添加另一个区域,例如“North”/“South”,或者引入了新的 Tier,什么是最好的编程方式来适应这些新增内容。

4

1 回答 1

0

您可以遍历轴和区域:

sales3 = sales.groupby(["Region","Tier"])[["Sales2015","Sales2016"]].sum().round().astype("int64")
sales3.reset_index(inplace=True)
fig,axes = plt.subplots(nrows=1,ncols=3,sharex=True,sharey=True,figsize=(10,6))

# define regions to plot
regions = ["Central", "East", "West"]

# iterate over regions and axes using zip()
for region, ax in zip(regions,axes):
    sales3[sales3["Region"]==region].plot(kind="bar",x="Tier",y=["Sales2015","Sales2016"],ax=ax)
    ax.set_title(region)
plt.tight_layout()

我认为关键是使用此处记录的 pythons 内置 zip 功能。

于 2020-05-14T19:33:37.010 回答