如何在条形顶部添加不是条形值的唯一值?

时间:2019-08-08 17:12:38

标签: python matplotlib graph seaborn

我正在尝试创建一个海洋柱状图,其值与顶部显示的柱状值不同。例如,我希望图表显示Bob的身高,但要在其栏上列出他的年龄。

我尝试使用for循环,该循环列出了每个人的年龄或列出索引时仅列出了一个元素,并且我已经厌倦了执行相同操作的map函数。

import pandas as pd
import numpy as np
import seaborn as sns
sns.set(style="whitegrid")
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (12.0, 10.0)


data = {'name': ['bob', 'mike', 'sam', 'robert', 'amy', 'sarah', 'jessica'], 
        'height(inches)': [72, 68, 71, 68, 74, 69, 74], 
        'age': [23, 24, 30, 25, 28, 25, 21]}

df = pd.DataFrame(data=data)

sns.barplot(x='name', y='height(inches)', data=df)
plt.xticks(rotation=90)

# Get current axis on current figure
ax = plt.gca()

for p in ax.patches:
    age = df['age'].values
    i = map(lambda x: x, age)
    ax.text(p.get_x() + p.get_width()/2., p.get_height(), age, ha='center', va='center')

这里是图像的链接(需要10个信誉点才能到达stackoverflow)(https://i.imgur.com/clVU7rU.png

我想在Bob的图表上方放置23个,在Mike的图表上方放置24个,依此类推。

这里有一个类似的问题(How to add percentages on top of bars in seaborn?),我尝试遵循/更改以使其适用于我的代码。仍然有麻烦。我对python和编码一般还是比较陌生,因此,我将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

在假定条形与数据帧中的顺序相同的前提下,

for p, age in zip(ax.patches, df['age'].values):
    ax.text(p.get_x() + p.get_width()/2., p.get_height(), age, 
            ha='center', va='bottom')