【问题标题】:Matplotlib Boxplot displayed in a tkinter windowMatplotlib Boxplot 显示在 tkinter 窗口中
【发布时间】:2021-07-19 14:54:28
【问题描述】:

我正在尝试在 tkinter 窗口中显示箱线图,但遇到了很多麻烦。我开始怀疑它是否可以完成。我一直在使用 matplotlib.pyplot plt.boxplot 在控制台中成功创建箱线图,但我无法让它显示在 tkinter 窗口中。 任何帮助将不胜感激!!!

这是带有 tkinter 窗口的箱线图代码:

    from tkinter import *
    import matplotlib.pyplot as plt

    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]
    a=plt.boxplot(box_plot_data)
    plt.show()

    lab_plot = Label(win_stat, text = a).pack()
    win_stat.mainloop()

【问题讨论】:

  • 你能给我们展示一个最小的工作示例吗?你试过什么?你的尝试有什么问题。
  • "Embedding in Tk"上有一个例子。
  • @TheLizzard 我在上面添加了箱线图代码。我只是不知道我怎么可能把那个情节放到一个 tkinter 窗口中
  • @Lucas 查看@acw1668 发送的链接,您似乎需要创建一个Figure,然后将图形转换为可以放入tkinter 窗口的画布。跨度>

标签: python matplotlib tkinter


【解决方案1】:

查看@acw1668给你的链接,你需要导入FigureCanvasTkAgg,然后用它来创建一个画布小部件,你可以在你的tkinter窗口中place/pack/grid就像这个:

import tkinter as tk

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

root = tk.Tk()

# First create a figure
fig = Figure(figsize=(5, 4), dpi=100)
# Create a plot on that figure
plot = fig.add_subplot()

# Plot the values on the figure
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)
plot.boxplot(box_plot_data)

# Create a canvas widget from the figure
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
# And then `.pack` it
canvas.get_tk_widget().pack(fill="both", expand=True)

root.mainloop()

【讨论】:

  • 我尝试运行您的代码,但收到一条错误消息:“NoneType”对象没有属性“boxplot”。代码对你有用吗?感谢您一直以来的帮助!!!
  • @Lucas 你确定你复制了我的代码吗?此外,我唯一一次使用plot 是离子这些行:plot = fig.add_subplot()plot.boxplot(box_plot_data)。根据documentation .add_subplot 不应该返回None。该代码适用于我
  • 好吧,我想我可能已经解决了这个问题。如果我使用 Spyder 3,代码会出现错误。但是,如果我使用 Spyder 5,则代码可以完美运行。我不知道为什么有任何想法?感谢您的宝贵时间,您已经帮了很多忙!
  • @Lucas 我从未使用过spyder。这可能是spyder 中的一个错误,已修复。我只使用过 VSCode/IDLE,所以我不知道为什么会这样。
  • 好吧,我会调查一下,谢谢你的帮助,你真的很重要!!!
猜你喜欢
  • 2017-10-17
  • 2018-02-03
  • 2016-10-12
  • 2018-03-02
  • 2015-12-01
  • 1970-01-01
  • 2018-01-08
  • 2014-03-25
  • 1970-01-01
相关资源
最近更新 更多