bar seaborn 图表上的多个注释

multiple annotations on bar seaborn chart

STRUD Struct_Count Perc
Row 1151 38.37
Single 865 28.83
Detached 447 14.90
Row End 384 12.80
Multi 146 4.87
Inside 3 0.10
Missing 2 0.07
Default 1 0.03
Town End 1 0.03
plt.figure(figsize=(15, 8))
 
plots = sns.barplot(x="STRUD", y="Struct_Count", data=df2)
 
for bar in plots.patches:  
 
    # Using Matplotlib's annotate function and
    # passing the coordinates where the annotation shall be done
    plots.annotate(format(bar.get_height(), '.0f'),
                   (bar.get_x() + bar.get_width() / 2,
                    bar.get_height()), ha='center', va='center',
                   size=13, xytext=(0, 5),
                   textcoords='offset points')
    
plt.title("Distribution of STRUCT")
 
plt.show()

通过从论坛中学到的上述代码,我可以绘制 'struct_count' 值,我如何在条形图上绘制相应的百分比值。提前感谢您的帮助。

您可以尝试使用 ax.bar_label 来设置自定义标签。不需要注释和循环。

我假设下面的例子是你所说的“在条上绘制相应的百分比值”的意思,但它可以灵活调整。

请注意,这不会显示小于 1% 的值,因为这些值会与 x-axis 和其他标签重叠。这也可以在下面轻松调整。

The docs 有一些有启发性的例子。

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1, figsize=(15, 8))
plots = sns.barplot(x="STRUD", y="Struct_Count", data=df2, ax=ax)
ax.bar_label(ax.containers[0])
ax.bar_label(ax.containers[0], 
             labels=[f'{e}%' if e > 1 else "" for e in df2.Perc],
             label_type="center")
plt.title("Distribution of STRUCT")