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

在Tkinter中Matplotlib散点图文本标注位置错误的问题排查

问题原因与解决方案

你用figure.text()添加标注时,默认采用的是Figure全局坐标系(取值0-1对应画布的宽高比例),而散点是绘制在子图的数据坐标系里,所以文本位置和散点不匹配。

要解决这个问题,核心是改用子图(Axes)的text()方法,它会自动使用数据坐标系定位:

修正后的完整代码

import tkinter
import pandas as pd
from matplotlib.backends.backend_tkagg import (
FigureCanvasTkAgg, NavigationToolbar2Tk)

import matplotlib.pyplot as plt

data = {'x': [0.2, 0.3], 'y': [0.5, 0.8], 'point': ["p1", "p2"]}
df = pd.DataFrame(data)

root = tkinter.Tk()

figure= plt.Figure(figsize=(5, 4), dpi=100)
# 单独保存子图对象,方便后续调用其方法
ax = figure.add_subplot(111)
ax.scatter(df['x'],df['y'])

for index, row in df.iterrows():
    # 使用子图的text方法,而非figure的text
    # 可选:添加xytext设置偏移,避免文本覆盖散点
    ax.text(row['x'], row['y'], row['point'], xytext=(5, 5), textcoords='offset points')

canvas = FigureCanvasTkAgg(figure, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

tkinter.mainloop()

关键修改点

  • 将子图对象赋值给ax变量,后续所有绘图操作都基于这个子图对象执行
  • 把figure.text()替换为ax.text(),这样文本会使用和散点一致的数据坐标系
  • 可选添加xytext=(5,5), textcoords='offset points'参数,让文本相对于散点坐标偏移5个像素,避免遮挡点本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:45:09