Python 堆叠面积图Seaborn唯一值X轴

Python 堆叠面积图Seaborn唯一值X轴,python,pandas,matplotlib,seaborn,Python,Pandas,Matplotlib,Seaborn,我想为下面的df创建一个堆积面积图 Aquisition_Channel Day_Since_Acquisition Total_Customers Digital 7 10 Digital 14 12 Digital 21 16 Digital 28

我想为下面的df创建一个堆积面积图

Aquisition_Channel   Day_Since_Acquisition  Total_Customers
Digital              7                       10
Digital              14                      12
Digital              21                      16
Digital              28                      20
Organic              7                       32
Organic              14                      40
Organic              21                      41
Organic              28                      45
Offline              7                       23
Offline              14                      30
Offline              21                      46
Offline              28                      55

这是我尝试过的,但它向我展示了列:
Day\u自获取以来
一个介于0和28之间的值范围,但是我只想在x轴上使用此列中的唯一值,而不是范围

df2 = pd.DataFrame(df, columns=['Aquisition_Channel', 'Day_Since_Acquisition', 'Total_Customers'])\
    .set_index('Day_Since_Acquisition')\
    .sort_values('Day_Since_Acquisition')


pt = pd.pivot_table(daf, columns=['Aquisition_Channel'], index=['Day_Since_Acquisition'], values=['Total_Customers'], fill_value=0)
pt = pt.cumsum()
pt.plot.area()
plt.show()
您可以尝试:

df = pd.DataFrame({'Aquisition_Channel': {0: 'Digital', 1: 'Digital', 2: 'Digital', 3: 'Digital', 4: 'Organic', 5: 'Organic', 6: 'Organic', 7: 'Organic', 8: 'Offline', 9: 'Offline', 10: 'Offline', 11: 'Offline'},
                   'Day_Since_Acquisition': {0: 7, 1: 14, 2: 21, 3: 28, 4: 7, 5: 14, 6: 21, 7: 28, 8: 7, 9: 14, 10: 21, 11: 28}, 'Total_Customers': {0: 10, 1: 12, 2: 16, 3: 20, 4: 32, 5: 40, 6: 41, 7: 45, 8: 23, 9: 30, 10: 46, 11: 55}})

fig = df.pivot_table(columns='Aquisition_Channel', index='Day_Since_Acquisition',
               values='Total_Customers', fill_value=0).plot(kind='bar', stacked=True)
输出:

进一步自定义以显示实际计数:

df = pd.DataFrame({'Aquisition_Channel': {0: 'Digital', 1: 'Digital', 2: 'Digital', 3: 'Digital', 4: 'Organic', 5: 'Organic', 6: 'Organic', 7: 'Organic', 8: 'Offline', 9: 'Offline', 10: 'Offline', 11: 'Offline'}, 'Day_Since_Acquisition': {0: 7, 1: 14, 2: 21, 3: 28, 4: 7, 5: 14, 6: 21, 7: 28, 8: 7, 9: 14, 10: 21, 11: 28}, 'Total_Customers': {0: 10, 1: 12, 2: 16, 3: 20, 4: 32, 5: 40, 6: 41, 7: 45, 8: 23, 9: 30, 10: 46, 11: 55}})
k = df.pivot_table(columns='Aquisition_Channel', index='Day_Since_Acquisition', values='Total_Customers', fill_value=0)
ax = k.plot(kind = 'bar', stacked = True)
cumm_heights = k.cumsum(1).T.values.flatten()

for i,p in enumerate(ax.patches):
    height = p.get_height()
    ax.text(p.get_x()+p.get_width()/2., cumm_heights[i] + 3, int(height), ha="center")
输出: