Python Matplotlib中簇柱状图的绘制

Python Matplotlib中簇柱状图的绘制,python,matplotlib,bar-chart,seaborn,Python,Matplotlib,Bar Chart,Seaborn,有人能解释一下我如何在Matplotlib中画一个像这样的聚类柱形图吗?我发现了一些类似的图表,但我想要的正是如图所示的图表。我把苹果和梨等水果的名字作为钥匙,把它们的年销售额作为钥匙的价值 以下代码首先创建一些玩具数据,然后使用matplotlib绘制条形图 导入matplotlib.pyplot作为plt 从matplotlib.transforms导入混合\u转换\u工厂 从matplotlib.ticker导入MultipleLocator 将numpy作为np导入 作为pd进口熊猫 导

有人能解释一下我如何在Matplotlib中画一个像这样的聚类柱形图吗?我发现了一些类似的图表,但我想要的正是如图所示的图表。我把苹果和梨等水果的名字作为钥匙,把它们的年销售额作为钥匙的价值


以下代码首先创建一些玩具数据,然后使用matplotlib绘制条形图

导入matplotlib.pyplot作为plt
从matplotlib.transforms导入混合\u转换\u工厂
从matplotlib.ticker导入MultipleLocator
将numpy作为np导入
作为pd进口熊猫
导入seaborn作为sns
水果=[“苹果”、“梨”、“油桃”、“李子”、“葡萄”、“草莓”]
年份=[2015、2016、2017]
num_水果=len(水果)
年数=年数(年)
df=pd.DataFrame({'fruit':np.tile(fruits,num_years),
“年”:np.重复(年数,果实数),
'value':np.random.randint(1,8,num_水果*num_年)}
宽度=0.8
对于i,列举水果(水果):
对于j,枚举年份(年):
plt.bar(i+宽度/年数*(j-(年数-1)/2),
df[(df['fruit']==水果)和(df['year']==年份]['value'],
宽度/年数,颜色为天蓝色,ec为白色)
plt.xticks([i+width/num_years*(j-(num_years-1)/2)表示i范围内(num_果实)表示j范围内(num_years)],
np.瓦片(年数,果实数),轮换=45)
ax=plt.gca()
ax.yaxis.set\U MARGY\U定位器(多路扩音器(1))
ax.yaxis.set_minor_定位器(多路传送器(0.2))
轴网格(真,轴='y')
ax.自动缩放(错误,轴=y')
trans=混合的转换工厂(ax.transData,ax.transAxes)
对于i,列举水果(水果):
text(i,-0.2,fruit,transform=trans,ha='center')
如果我0:
ax.vlines(i-0.5,0,-0.3,color='lightgrey',clip_on=False,transform=trans)
plt.紧_布局()
打印(df)
plt.show()

对于本例,数据如下所示:

果年值
0苹果2015 1
1梨2015 3
2油桃2015 6
3李子2015 3
2015年4月3日
5草莓2015 1
6苹果2016 4
7梨2016 6
8个油桃2016 1
9李子2016 6
10葡萄2016 4
11草莓2016 5
12苹果2017 3
13梨2017 6
14个油桃2017 7
15李子2017 3
16葡萄2017 5
17草莓2017 1