import tkinter as tk from tkinter import ttk import pandas as pd import numpy as np import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from PIL import Image, ImageTk

加载数据集

data = pd.read_csv('性别分类数据集0.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()

创建画布

fig = plt.figure(figsize=(6, 4), dpi=100) canvas = FigureCanvasTkAgg(fig, master=root) canvas.get_tk_widget().pack(pady=20)

def update_plot(): # 获取选择的性别和特征 gender = int(gender_var.get() == '男') feature = feature_var.get()

# 根据选择的特征绘制不同的图形
if feature in ['forehead_width_cm', 'forehead_height_cm']:
    # 绘制散点图
    df = data[data['gender'] == gender][feature]
    # 计算分组间隔
    bin_width = (df.max() - df.min()) / 10
    # 绘制直方图
    plt.hist(df, bins=np.arange(df.min(), df.max()+bin_width, bin_width), align='mid', histtype='bar', rwidth=0.8)
    plt.xlabel(feature)
    plt.ylabel('count')
    fig.savefig('temp.png')  # 保存图像
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})')
    fig.savefig('temp.png')  # 保存图像

# 清空画布并绘制新图
new_img = Image.open('temp.png')
new_img = new_img.resize((canvas.get_tk_widget().winfo_width(), canvas.get_tk_widget().winfo_height()))
new_photo = ImageTk.PhotoImage(new_img)

# 更新画布
canvas.get_tk_widget().delete('all')
canvas.get_tk_widget().create_image(canvas.get_tk_widget().winfo_width() / 2, canvas.get_tk_widget().winfo_height() / 2, image=new_photo)

创建按钮,并绑定更新图的函数

update_button = ttk.Button(root, text='更新图', command=update_plot) update_button.pack(pady=10)

运行主循环

root.mainloop(

import tkinter as tkfrom tkinter import ttkimport pandas as pdimport numpy as npimport matplotlibpyplot as pltfrom PIL import Image ImageTk# 加载数据集data = pdread_csv性别分类数据集0csv# 创建主窗口root = tkTkroottitl

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

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