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

如何在Matplotlib中精准放置文本于首个y轴刻度标签正上方

解决方案

要精准将文本“Rank”放置在首个y轴刻度标签正上方,无需试凑硬编码数值,可通过获取刻度标签的实际位置并利用matplotlib坐标变换实现,适配不同参数的图表。

修改后代码

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from pylab import rcParams

rcParams['figure.figsize'] = 8, 6
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
df = pd.DataFrame.from_records(zip(np.arange(1,30)))
df.plot.barh(width=0.8, ax=ax, legend=False)

# 移除边框与刻度线
ax.spines[['right', 'top', 'left', 'bottom']].set_visible(False)
ax.tick_params(left=False, bottom=False)
ax.tick_params(axis='y', which='major', pad=36)
ax.set_title("Rankings")

# 获取首个y轴刻度标签对象
first_y_label = ax.yaxis.get_ticklabels()[0]
# 获取标签的位置与对应坐标变换规则
label_pos = first_y_label.get_position()
label_transform = first_y_label.get_transform()

# 在标签正上方放置文本
ax.annotate(
    "Rank",
    xy=label_pos,
    xycoords=label_transform,
    xytext=(0, 15),  # 向上偏移15像素,可根据需求调整
    textcoords='offset points',
    ha='center',  # 水平居中对齐标签
    va='bottom'
)

plt.show()

核心逻辑说明

  • 通过 ax.yaxis.get_ticklabels()[0] 获取第一个y轴刻度标签的对象,直接定位目标位置的载体
  • 利用标签自身的坐标变换规则(get_transform()),避免手动转换坐标的复杂操作
  • 使用 annotate 配合像素偏移(offset points),确保文本始终在标签正上方且水平居中,不受图表尺寸、内边距变化影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:25:11