如何在Seaborn中为水平条形图添加数值标签
如何为Seaborn水平条形图添加数值标签
没问题,这事儿其实很简单——我们只需要在绘制完条形图后,遍历每个条形元素,用Matplotlib的text()方法把数值标签贴上去就行。下面是整合了标签添加逻辑的完整代码:
import seaborn as sns import matplotlib.pyplot as plt f, ax = plt.subplots(figsize=(6, 15)) crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False) # 绘制水平条形图 sns.barplot(x="total", y="abbrev", data=crashes, label="Total", color="b") ax.set(xlim=(0, 24), ylabel="", xlabel="Automobile collisions per billion miles") # 核心:添加数值标签 for p in ax.patches: # 获取当前条形的宽度(也就是对应的total数值) bar_width = p.get_width() # 设置标签的位置:x轴在条形右侧偏移一点,y轴在条形垂直中心 ax.text( bar_width + 0.2, # x坐标,+0.2避免标签和条形重叠 p.get_y() + p.get_height() / 2, # y坐标,垂直居中 f"{bar_width:.1f}", # 格式化数值,保留1位小数 ha="left", va="center" # 文本对齐方式:水平左对齐,垂直居中 ) plt.show()
关键步骤解释:
ax.patches:这个属性会返回图中所有的条形元素,我们遍历每个元素就能逐个添加标签p.get_width():因为是水平条形图,条形的宽度就对应x轴的数值(也就是total字段的值)p.get_y() + p.get_height()/2:计算条形的垂直中心位置,让标签垂直居中显示f"{bar_width:.1f}":用f-string格式化数值,你可以根据需求调整小数位数,比如.0f就是整数显示- 偏移量
0.2:可以根据你的图表尺寸调整,确保标签和条形之间有合适的间距,不会挤在一起
这样处理后,每个条形的右侧都会显示对应的具体数值,让图表的可读性大大提升~
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

