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

如何将matplotlib生成的图表精准放置到Tkinter窗口的指定坐标位置

问题核心原因

  • 混用了Tkinter的两种布局管理器:moveto()属于place绝对定位布局的方法,调用后又执行pack()布局,pack规则会直接覆盖你设置的坐标参数,导致位置失效。
  • 你设置的pack(side="left")和pack(side="right")会让两个画布分别贴靠窗口左右边缘,自然无法对齐到指定的x=69、x=481的目标位置。
  • 第二个饼图额外添加的图例,会占用画布外部空间,导致实际显示尺寸和你预设的3.99*2.72英寸不符,进一步加剧偏移。

修复方案

完全放弃pack布局,直接用place做绝对定位即可,同时调整饼图图例位置避免挤占画布尺寸,修改后的代码如下:

import tkinter
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.path as mpath

# 初始化窗口,根据你实际的窗口尺寸调整geometry参数
window = tkinter.Tk()
window.geometry("900x600")

# 生成第一个折线图
fig = Figure(dpi=100)
fig.set_size_inches(3.99, 2.72, forward=True)
# 可按需调整subplot边距,减少不必要的空白
fig.subplots_adjust(left=0.15, right=0.95, top=0.9, bottom=0.15)
fig.add_subplot(111).plot(
    ['Juni', 'Test', 'Yessir'], 
    [1, 3254, 235], 
    marker=mpath.Path.unit_circle(), 
    markersize=5
)
canvas = FigureCanvasTkAgg(fig, master=window)
# 直接用place定位,不要调用pack
canvas.get_tk_widget().place(x=481, y=222)

# 生成第二个饼图
abteilungen = ['Editing', 'Web Entwicklung', '3D Modeling', 'NFT', 'Office']
anteile = [15,25,40,10,11]

fig2 = Figure(dpi=100)
fig2.set_size_inches(3.99, 2.72, forward=True)
fig2.subplots_adjust(left=0.15, right=0.95, top=0.9, bottom=0.15)
ax = fig2.add_subplot(111)
ax.pie(anteile, radius=1, labels=abteilungen, autopct='%0.2f%%')
# 图例放在图内,避免额外占用画布宽度
fig2.legend(loc='lower right', bbox_to_anchor=(0.9, 0.1))
chart1 = FigureCanvasTkAgg(fig2, master=window)
# 直接用place定位,不要调用pack
chart1.get_tk_widget().place(x=69, y=222)

window.mainloop()

如果仍有轻微位置偏差,可微调place的x/y坐标,或者调整set_size_inches的尺寸参数即可。

内容的提问来源于stack exchange,提问作者Dennis van den Brock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:09:00