以下是完整的代码实现:

import matplotlib.pyplot as plt
from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk

def adef_keshihua(txt, window):
    text.delete('1.0', END)
    y_train = [0.724116199, 2.285849418, 0.292243314, 2.895797676, 0.438462215, 1.543319689, 1.169727273, 0.766681439, 0.769798934, 0.440894989, 2.10413745, 2.013255745, 0.781939731, 0.306292184, 0.438392904, 1.665304082, 1.156816479, 1.169240272, 1.563880105, 1.634383048, 1.916477293]
    fig, ax = plt.subplots()
    ax.hist(y_train, bins=20)
    ax.set_xlabel('')
    ax.set_ylabel('manyidu')
    ax.set_title('Histogram')
    histogram_window = Toplevel(root)
    canvas = FigureCanvasTkAgg(fig, master=histogram_window)
    canvas.draw()
    canvas.get_tk_widget().pack()
    toolbar = NavigationToolbar2Tk(canvas, histogram_window)
    toolbar.update()
    canvas.get_tk_widget().pack()

# 创建主窗口
root = Tk()
root.title('数据可视化')

# 创建文本框和按钮
text = Text(root, height=10, width=50)
text.pack()
btn = Button(root, text='绘制直方图', command=lambda: adef_keshihua(text, root))
btn.pack()

# 进入消息循环
root.mainloop()

代码解释:

  1. 导入库: 首先,我们导入 matplotlib.pyplot 用于创建图形,tkinter 用于创建 GUI,以及 matplotlib.backends.backend_tkagg 用于在 Tkinter 窗口中嵌入 Matplotlib 图形。

  2. 定义函数: 我们定义一个名为 adef_keshihua 的函数,它接收一个文本框 (txt) 和一个窗口 (window) 作为参数。

  3. 创建直方图: 在函数中,我们使用 plt.subplots() 创建一个空白图形和轴。然后,我们使用 ax.hist() 函数在轴上绘制直方图,bins=20 表示将数据分成 20 个组。

  4. 设置标签: 使用 ax.set_xlabel()ax.set_ylabel()ax.set_title() 设置直方图的坐标轴标签和标题。

  5. 创建新窗口: 我们使用 Toplevel() 创建一个新的 Tkinter 窗口来显示直方图。

  6. 将图形嵌入窗口: 使用 FigureCanvasTkAgg() 将图形嵌入到 Tkinter 窗口中。

  7. 绘制图形和工具栏: 使用 canvas.draw() 绘制图形,并使用 NavigationToolbar2Tk() 添加一个导航工具栏。

  8. 创建主窗口: 创建一个名为 root 的主窗口,并设置标题为 '数据可视化'。

  9. 创建文本框和按钮: 在主窗口中,创建了一个文本框和一个按钮。当点击按钮时,调用 adef_keshihua 函数,并传递文本框和窗口作为参数。

  10. 启动主循环: 使用 root.mainloop() 启动 Tkinter 的主循环,使应用程序能够响应用户交互。

这段代码演示了如何使用 Tkinter 和 Matplotlib 在 Python 中创建一个直方图,并将其嵌入到 Tkinter 窗口中。这对于在应用程序中进行数据可视化非常有用。

Python Tkinter Matplotlib: 使用直方图可视化数据

原文地址: https://www.cveoy.top/t/topic/oqcr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录