使用 Python Tkinter 设计数据可视化窗口

本示例使用 Python 的 Tkinter 库设计一个交互式数据可视化窗口。该窗口允许用户选择性别和特征,并根据选择动态显示相应的散点图或柱状图。

功能说明:

  • 窗口包含两个下拉菜单:
    • '请选择性别':选择 '男' 或 '女'
    • '请选择图的特征':选择数据集中某个特征,例如 'forehead_width_cm' 或 'long_hair'
  • 窗口的下半部分用于显示图形,根据用户选择动态更新。

代码示例:

import tkinter as tk
from tkinter import ttk
import pandas as pd
import matplotlib.pyplot as plt

# 加载数据集
data = pd.read_csv('data.csv')

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

# 创建下拉列表选择性别
gender_label = ttk.Label(root, text='请选择性别')
gender_label.pack(pady=10)
gender_var = tk.StringVar(value='1')
gender_combobox = ttk.Combobox(root, textvariable=gender_var, values=['男', '女'])
gender_combobox.pack()

# 创建下拉列表选择特征
feature_label = ttk.Label(root, text='请选择图的特征')
feature_label.pack(pady=10)
feature_var = tk.StringVar(value='forehead_width_cm')
feature_combobox = ttk.Combobox(root, textvariable=feature_var, values=['forehead_width_cm', 'forehead_height_cm', 'long_hair', 'nose_wide', 'nose_long', 'lips_thin', 'distance_nose_to_lip_long'])
feature_combobox.pack()

# 创建画布
canvas = tk.Canvas(root, width=600, height=400)
canvas.pack(pady=20)

# 定义更新图的函数
def update_plot():
    # 获取选择的性别和特征
gender = int(gender_var.get() == '男')
feature = feature_var.get()
    
    # 根据选择的特征绘制不同的图形
    if feature in ['forehead_width_cm', 'forehead_height_cm']:
        # 绘制散点图
        plt.scatter(data[data['gender'] == gender][feature], data[data['gender'] == gender]['face_width_cm'])
        plt.xlabel(feature)
        plt.ylabel('face_width_cm')
        plt.title(f'{feature} vs. face_width_cm ({gender})')
    else:
        # 绘制柱状图
        plt.bar([0, 1], [data[(data['gender'] == gender) & (data[feature] == 0)].shape[0], data[(data['gender'] == gender) & (data[feature] == 1)].shape[0]])
        plt.xticks([0, 1], ['0', '1'])
        plt.xlabel(feature)
        plt.ylabel('count')
        plt.title(f'{feature} ({gender})')
    
    # 清空画布并绘制新图
    canvas.delete('all')
    canvas.create_rectangle(0, 0, canvas.winfo_width(), canvas.winfo_height(), fill='white')
    canvas.create_image(canvas.winfo_width() / 2, canvas.winfo_height() / 2, image=tk.PhotoImage(file='temp.png'))
    
    # 保存图像
    plt.savefig('temp.png')

# 创建按钮,并绑定更新图的函数
update_button = ttk.Button(root, text='更新图', command=update_plot)
update_button.pack(pady=10)

# 运行主循环
root.mainloop()

注意:

  • 由于 matplotlib 的图形无法直接在 tkinter 窗口中显示,因此需要将图像先保存为临时文件,再将临时文件加载到 tkinter 的画布上。
  • 代码中使用 plt.savefig('temp.png') 保存图像,并在画布上使用 tk.PhotoImage(file='temp.png') 加载图像。
  • 如果您的 matplotlib 版本较老,可能需要使用 plt.gcf().canvas.tostring_rgb() 方法将图像转换为字节流。

代码说明:

  • 代码首先导入必要的库,包括 tkinterttkpandasmatplotlib.pyplot
  • 加载数据文件 'data.csv'。
  • 创建主窗口,设置标题和大小。
  • 创建下拉菜单选择性别和特征,并绑定相应的变量。
  • 创建画布用于显示图形。
  • 定义 update_plot 函数,根据用户选择的性别和特征绘制不同的图形,并将图形保存为 'temp.png' 文件。
  • 创建按钮,并绑定 update_plot 函数。
  • 运行主循环,启动窗口。

通过上述代码,您可以创建一个功能完善的交互式数据可视化窗口,方便您进行数据分析和展示。

Python Tkinter 数据可视化窗口设计:性别和特征筛选

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

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