import tkinter as tk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 读取数据集
data = pd.read_csv('data.csv')

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

# 创建下拉列表选择性别
gender_var = tk.StringVar(root)
gender_var.set('男性')
gender_label = tk.Label(root, text='请选择性别')
gender_label.pack()
gender_option = tk.OptionMenu(root, gender_var, '男性', '女性')
gender_option.pack()

# 创建下拉列表选择特征
feature_var = tk.StringVar(root)
feature_var.set('forehead_width_cm')
feature_label = tk.Label(root, text='请选择图的特征')
feature_label.pack()
feature_option = tk.OptionMenu(root, feature_var, 'forehead_width_cm', 'forehead_height_cm', 'long_hair', 'nose_wide', 'nose_long', 'lips_thin', 'distance_nose_to_lip_long')
feature_option.pack()

# 创建画布
figure = plt.figure(figsize=(5, 4), dpi=100)
figure_canvas = FigureCanvasTkAgg(figure, master=root)
figure_canvas.get_tk_widget().pack()

# 更新图像
def update_figure():
    # 获取选择的性别和特征
    gender = 1 if gender_var.get() == '男性' else 0
    feature = feature_var.get()
    
    # 筛选数据
    filtered_data = data.loc[data['gender'] == gender]
    
    # 清空图像
    figure.clf()
    
    # 绘制散点图或柱状图
    if feature in ['forehead_width_cm', 'forehead_height_cm']:
        ax = figure.add_subplot(111)
        ax.scatter(filtered_data[feature], filtered_data['face_width_cm'])
        ax.set_xlabel(feature)
        ax.set_ylabel('face_width_cm')
    else:
        ax = figure.add_subplot(111)
        counts = filtered_data[feature].value_counts()
        ax.bar(counts.index, counts.values)
        ax.set_xlabel(feature)
        ax.set_ylabel('count')
    
    # 更新画布
    figure_canvas.draw()

# 创建更新按钮
update_button = tk.Button(root, text='更新', command=update_figure)
update_button.pack()

# 运行主循环
root.mainloop()

这段代码创建了一个交互式窗口,用户可以通过下拉菜单选择性别和特征,程序会根据选择动态地绘制相应的散点图或柱状图。几点改进:

  1. 使用 FigureCanvasTkAgg: 使用 matplotlib.backends.backend_tkagg 中的 FigureCanvasTkAgg 将 Matplotlib 图表嵌入 Tkinter 窗口,实现更优雅的集成。
  2. 清空图像: 在每次更新图像前,使用 figure.clf() 清空之前的图像,避免图像重叠。
  3. SEO 优化: 标题和描述中包含相关关键词,例如 Python,Tkinter,数据可视化,散点图,柱状图等,方便搜索引擎收录。

希望这些信息对您有所帮助!

Python Tkinter数据可视化:性别特征散点图和柱状图

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

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