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

Matplotlib中如何用annotate在图例下方精准定位文本并保存PDF

简洁实现:将注释文本定位在图例右下角下方20像素

我完全懂你想要的——不想搞那些冗余的额外坐标轴操作,就想精准把注释钉在图例右下角往下20像素的位置,还要完美导出PDF对吧?下面给你一套极简方案:

关键思路

直接获取图例的像素边界框,计算出注释的目标位置后,把像素坐标转成图表的归一化坐标(避免导出PDF时错位),最后用annotate()精准定位。

完整代码示例

import matplotlib.pyplot as plt

# 1. 先绘制你的基础图表和图例
fig, ax = plt.subplots()
line1, = ax.plot([1,2,3], label="示例曲线1")
line2, = ax.plot([3,2,1], label="示例曲线2")
# 保存图例对象,方便后续获取位置
legend = ax.legend()

# 2. 获取图例的右下角像素坐标
legend_bbox = legend.get_window_extent()
# x1是图例右下角的x像素值,y0是右下角的y像素值(Matplotlib像素坐标系y轴向上)
legend_right_x = legend_bbox.x1
legend_bottom_y = legend_bbox.y0

# 3. 计算注释的目标位置:右上角对齐图例右下角,y轴减20像素
annotate_right_x = legend_right_x
annotate_top_y = legend_bottom_y - 20

# 4. 把像素坐标转成图表的归一化坐标(适配PDF导出的画布尺寸)
annotate_xy = fig.transFigure.inverted().transform((annotate_right_x, annotate_top_y))

# 5. 添加注释文本,设置对齐方式为右上角
ax.annotate("这是你要显示的注释文本",
            xy=annotate_xy,
            xycoords='figure fraction',  # 使用归一化坐标
            ha='right', va='top',  # 让注释的右上角对齐目标点
            fontsize=10)

# 6. 保存为PDF,避免元素被裁剪
plt.savefig("annotated_plot.pdf", bbox_inches='tight')
plt.show()

重点细节解释

  • 像素坐标转归一化坐标:因为直接用像素坐标的话,导出PDF时如果画布尺寸变化,位置会偏移;转成figure fraction(0到1的范围)后,位置会自适应画布,完美适配PDF导出。
  • 对齐方式设置:ha='right'和va='top'确保注释文本的右上角正好落在我们计算的目标点上,完全符合你“注释右上角置于图例右下角下方20像素”的要求。
  • PDF保存:加上bbox_inches='tight'能确保图例和注释都被完整保存,不会出现裁剪问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:09:08