在python matplotlib条形图中将条和标签分组在一起

时间:2019-08-06 19:39:08

标签: python pandas matplotlib bar-chart

我目前正在尝试使用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()

enter image description here

我想这样做,所以它只显示一次产品名称,并且同一产品的条形之间没有空格。

1 个答案:

答案 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])这样,它将把您的产品编号添加到索引中,以方便在产品之间留出额外的空间。