python - 堆积面积图 Seaborn 唯一值 X 轴
问题描述
我想为下面的 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_Since_Acquisition
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")
输出:
推荐阅读
- node.js - 无法在 VSCode 上调试 Typescript
- javascript - Quick.db discord.js
- python - 我怎样才能从bloomberg 上抓取这张表并获得一个pandas 数据框?
- multithreading - openblas可以在fortran中使用多线程进行矩阵乘法吗?
- r - 使用 dplyr 创建一个新列并计算具有阈值的重复项
- c++ - MSVC 正在编译的文件的输出文件名
- django - 保存 django JSONField 时如何保留元素顺序
- json - 解码 REST 时 Swift Playground 出现奇怪错误
- javascript - THREE.WebGLProgram:着色器错误:gl.getProgramInfoLog 必须附加已编译的片段着色器
- c++ - 如果我在函数中使用指针来填充列表,我是否必须在 C++ 中的函数末尾删除该指针?