python - Pandas 交叉表图 - 如何显示值
问题描述
我有以下数据集:
df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8,9,10,11,12],
'city':['Pau','Pau','Pau','Pau','Pau','Pau','Lyon','Dax','Dax','Lyon','Lyon','Lyon'],
'type':['A','A','A','A','B','B','B','A','B','A','B','B'],
'val':[100,90,95,95,90,75,100,70,75,90,95,85]})
我想创建一个线图,在其中显示每个分组城市的类型百分比,并查看线上每个点的数值。
我试过这个:
pd.crosstab(df['city'],df['type'],normalize = 'index').plot(marker = 'x)
plt.show()
请,任何帮助或指导将不胜感激。
解决方案
您可以使用 matplotlib 的plt.text添加它们
我认为最好将绘图与数据计算分开......它使一切都更加清晰!
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8,9,10,11,12],
'city':['Pau','Pau','Pau','Pau','Pau','Pau','Lyon','Dax','Dax','Lyon','Lyon','Lyon'],
'type':['A','A','A','A','B','B','B','A','B','A','B','B'],
'val':[100,90,95,95,90,75,100,70,75,90,95,85]})
ct = pd.crosstab(df['city'],df['type'],normalize = 'index')
f, ax = plt.subplots()
ax.plot(ct)
for i, (x, y) in enumerate(ct.iterrows()):
ax.text(x=i, y=y.A, s=f"{round(y.A*100)}%")
ax.text(x=i, y=y.B, s=f"{round(y.B*100)}%")