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

技术求助:如何在Tkinter窗口中显示Matplotlib箱线图(Boxplot)

解决Tkinter中嵌入Matplotlib箱线图的问题

我来帮你搞定这个问题!你当前的代码里有两个关键问题,导致箱线图无法正确嵌入Tkinter窗口:

  • 直接调用plt.show()会触发Matplotlib默认的独立绘图窗口,这不仅和你嵌入Tkinter的需求冲突,还会打断Tkinter的主循环流程。
  • 你把plt.boxplot()的返回值(一个包含箱线图各类元素的字典)放到Label组件里,这完全不对——Label只能显示文本内容,根本无法渲染Matplotlib的绘图对象。

修正后的完整代码

from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

win_stat = Tk()
win_stat.title('Data Analysis')
win_stat.geometry("700x400+300+150")

# 准备绘图数据
value1 = [27,28.3,25.7,26.9,29.9,30,30.03,31.2,27.9,27.1,25.4,26.5,26.2,28.5,29.1,29]
value2 = [26.8,27.9,25.1,28,29,29.6,29.9,30.7,23,27.5,24.3,28,27.5,31.5,30,32]
box_plot_data = [value1, value2]

# 创建Matplotlib的Figure对象(面向对象方式,更适合嵌入GUI)
fig = Figure(figsize=(6, 3), dpi=100)
# 添加子图
ax = fig.add_subplot(111)
# 在子图上绘制箱线图
ax.boxplot(box_plot_data)
# 设置标题和标签(可选,提升可读性)
ax.set_title('Boxplot Comparison')
ax.set_xticklabels(['Group 1', 'Group 2'])

# 将Figure转换为Tkinter可识别的组件
canvas = FigureCanvasTkAgg(fig, master=win_stat)
canvas.draw()
# 将canvas添加到Tk窗口中
canvas.get_tk_widget().pack(fill=BOTH, expand=True)

win_stat.mainloop()

关键步骤解释

  1. 导入必要的后端模块:FigureCanvasTkAgg是Matplotlib专门为Tkinter提供的桥接组件,负责把Matplotlib的绘图对象转换成Tkinter能渲染的组件。
  2. 使用面向对象的Matplotlib API:创建独立的Figure和Axes对象,而不是依赖plt的全局状态,这种方式更适合在GUI应用中使用,避免全局状态冲突。
  3. 避免调用plt.show():这个函数会启动Matplotlib自己的窗口,和Tkinter的主循环冲突,我们只需要用canvas.draw()来渲染图像。
  4. 将canvas添加到Tk窗口:通过canvas.get_tk_widget()获取对应的Tkinter组件,然后用pack(或grid/place)方法添加到窗口,设置fill=BOTH, expand=True可以让图表随窗口大小自动调整。

这样修改后,箱线图就能完美嵌入到你的Tkinter窗口里啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:07:50