如何在Seaborn条形图的条形中间添加匹配颜色的数值标签
在Seaborn横向条形图中添加同色数值标签
直接给你修改后的完整代码,能实现每个条形中间显示对应数值,且标签颜色和条形一致:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 原代码漏了这个导入,必须补上 VAL = [8, 4, 5, 20] objects = ['h', 'b', 'c', 'a'] y_pos = np.arange(len(objects)) cmap = plt.get_cmap('RdYlGn_r') norm = plt.Normalize(vmin=min(VAL), vmax=max(VAL)) ax = sns.barplot(x=VAL, y=objects, hue=VAL, palette='RdYlGn_r', dodge=False) # 核心:遍历每个条形,添加同色数值标签 for patch in ax.patches: # 获取条形的宽度(对应VAL的数值)、中心y坐标、填充颜色 width = patch.get_width() y = patch.get_y() + patch.get_height() / 2 bar_color = patch.get_facecolor() # 在条形中间位置添加文本标签 ax.text(width / 2, y, f'{int(width)}', ha='center', va='center', color=bar_color) plt.yticks(y_pos, objects) plt.show()
关键步骤说明
- 补导入
matplotlib.pyplot:原代码里用到了plt.get_cmap但没导入,运行会报错,必须加上 - 遍历
ax.patches:每个patch对应一个条形,通过它能获取条形的尺寸、颜色等属性 - 计算标签位置:横向条形的x轴是数值,所以标签x位置设为宽度的一半(条形中间),y位置取条形的垂直中心
- 设置标签颜色:直接用
patch.get_facecolor()获取条形的填充色,让标签和条形颜色一致
内容的提问来源于stack exchange,提问作者Sadcow
相关产品推荐
相关产品推荐

