我目前正在尝试使用Python 3.x中的matplotlib创建分组和堆叠的条形图。我只能使堆叠的部分正常工作,而无法将它们分组。
#This is what my dataframe looks like
Product_set Opened s1 s2 s3 s4
0 Product 1 Mar-19 1 NaN 1 NaN
1 Product 1 May-19 5 89.0 210 19.0
2 Product 1 Jun-19 14 117.0 282 33.0
3 Product 1 Jul-19 12 114.0 219 27.0
4 Product 2 Apr-19 1 7.0 5 NaN
5 Product 2 May-19 10 94.0 102 6.0
6 Product 2 Jun-19 10 103.0 131 13.0
7 Product 2 Jul-19 8 82.0 98 7.0
8 Product 3 Apr-19 1 11.0 24 4.0
9 Product 3 May-19 35 157.0 318 32.0
10 Product 3 Jun-19 36 236.0 354 49.0
11 Product 3 Jul-19 31 189.0 264 30.0
12 Product 4 May-19 42 146.0 353 84.0
13 Product 4 Jun-19 61 218.0 478 103.0
14 Product 4 Jul-19 38 126.0 306 104.0
ax=data.plot.bar(stacked=True,figsize=(20,7),edgecolor="black")
ax.minorticks_on()
plt.xticks(rotation=360)
plt.xlabel('')
plt.ylabel('')
plt.title('')
ax.tick_params(axis='x', which='major', pad=30, size=0)
# Set minor X labels
pos = []
for bar in ax.patches:
pos.append(bar.get_x()+bar.get_width()/2.)
ax.set_xticks(pos,minor=True)
ax.set_xticklabels(data['Product_set'])
ax.set_xticklabels(data['Opened'],minor=True)
plt.show()
我想这样做,所以它只显示一次产品名称,并且同一产品的条形之间没有空格。
答案 0 :(得分:0)
您可以使用
之类的伪造数据标签。ax.set_xticklabels(['','','Product 1','','','','Product 2','','','','Product 3','','','Product4',''])
要封闭空格,请在plot.bar语句中使用align='edge'
,并在产品之间添加一些值为0的欺骗条目。由于日期和产品仅在标签中,因此只需为欺骗性条目添加另一个空字符串
编辑:更加动态
dataframe.plot.bar具有可以使用的x = [positions]参数。您需要制作一个带有位置的数组,可能像data.index+int(data.Product_set[-1])
这样,它将把您的产品编号添加到索引中,以方便在产品之间留出额外的空间。