在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
相关产品推荐
相关产品推荐

