首页 > 解决方案 > 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()

在此处输入图像描述

但我不知道如何放置数据标签。我附上了我的预期情节的图片: 在此处输入图像描述

请,任何帮助或指导将不胜感激。

标签: pythonpandas

解决方案


您可以使用 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)}%")


推荐阅读