You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Matplotlib柱状图的数值标签上移指定像素

如何将Matplotlib堆叠柱状图的数值标签上移指定像素距离?

要把堆叠柱状图的数值标签精确上移20像素,你可以通过捕获bar_label生成的文本对象,再借助Matplotlib的坐标转换工具调整位置,具体修改如下:

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt

# 假设已定义grades_simple_completed、grades_simple_failed和x_labels
points_1_25 = {'Completed' : grades_simple_completed, 'Failed': grades_simple_failed}
fig, ax = plt.subplots(figsize=(25, 10))
bottom = np.zeros(25)
width = 0.8

for verdict, point in points_1_25.items():
    p = ax.bar(x_labels, point, width, label=verdict, bottom=bottom)
    bottom += point
    # 捕获生成的标签文本对象
    labels = ax.bar_label(p, label_type='center', color='w', fontsize=20)
    # 逐个调整标签位置,上移20像素
    for label in labels:
        # 将当前数据坐标转为屏幕像素坐标
        x_pix, y_pix = ax.transData.transform(label.get_position())
        # 上移20像素
        y_pix += 20
        # 转换回数据坐标并设置新位置
        new_x, new_y = ax.transData.inverted().transform((x_pix, y_pix))
        label.set_position((new_x, new_y))

ax.set_facecolor("gray")
ax.set_title('Some label', fontsize=25)
ax.tick_params(axis='both', labelsize=20)
ax.set_ylim([0, 11])
ax.legend(prop={'size': 20}, loc='lower center')

plt.show()

关键逻辑说明

  1. 捕获标签对象:调用ax.bar_label时会返回一组文本对象,将其存入labels变量以便后续调整
  2. 坐标转换实现精确偏移:
    • 用ax.transData.transform()把标签的当前数据坐标转成屏幕像素坐标
    • 给y方向的像素值加20,实现固定像素的上移
    • 再用ax.transData.inverted().transform()把调整后的像素坐标转回数据坐标,确保标签位置适配图表坐标系

如果不需要严格的像素偏移,只是想让标签稍微上移,也可以直接修改数据坐标的y值,比如:

for label in labels:
    label.set_y(label.get_y() + 0.3)  # 0.3是数据坐标的偏移量,可根据y轴范围调整

内容的提问来源于stack exchange,提问作者alekscooper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:05:10