将数据标签添加到Seaborn因子图

spa*_*row 6 python matplotlib seaborn

我想为Seaborn生成的因子图添加数据标签.这是一个例子:

import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

titanic_df = pd.read_csv('train.csv')
sns.factorplot('Sex',data=titanic_df,kind='count')
Run Code Online (Sandbox Code Playgroud)

此图像已创建

如何将"计数"值添加到图表上每个条形的顶部?

Nic*_*eli 15

你可以这样做:

import math
# Set plotting style
sns.set_style('whitegrid')

# Rounding the integer to the next hundredth value plus an offset of 100
def roundup(x):
    return 100 + int(math.ceil(x / 100.0)) * 100 

df = pd.read_csv('train.csv')
sns.factorplot('Sex', data=df, kind='count', alpha=0.7, size=4, aspect=1)

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

# ylim max value to be set
y_max = df['Sex'].value_counts().max() 
ax.set_ylim([0, roundup(y_max)])

# Iterate through the list of axes' patches
for p in ax.patches:
    ax.text(p.get_x() + p.get_width()/2., p.get_height(), '%d' % int(p.get_height()), 
            fontsize=12, color='red', ha='center', va='bottom')

plt.show()
Run Code Online (Sandbox Code Playgroud)

图片


Shi*_*Dua 5

你可以做一些更简单的事情

plt.figure(figsize=(4, 3))
plot = sns.catplot(x='Sex', y='count', kind='bar', data=titanic_df)

# plot.ax gives the axis object
# plot.ax.patches gives list of bars that can be access using index starting at 0

for i, bar in enumerate(plot.ax.patches):
    h = bar.get_height()
    plot.ax.text(
        i, # bar index (x coordinate of text)
        h+10, # y coordinate of text
        '{}'.format(int(h)),  # y label
        ha='center', 
        va='center', 
        fontweight='bold', 
        size=14)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述