Python Tkinter数据可视化:性别特征散点图和柱状图
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()
这段代码创建了一个交互式窗口,用户可以通过下拉菜单选择性别和特征,程序会根据选择动态地绘制相应的散点图或柱状图。几点改进:
- 使用 FigureCanvasTkAgg: 使用
matplotlib.backends.backend_tkagg中的FigureCanvasTkAgg将 Matplotlib 图表嵌入 Tkinter 窗口,实现更优雅的集成。 - 清空图像: 在每次更新图像前,使用
figure.clf()清空之前的图像,避免图像重叠。 - SEO 优化: 标题和描述中包含相关关键词,例如 Python,Tkinter,数据可视化,散点图,柱状图等,方便搜索引擎收录。
希望这些信息对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/fYfn 著作权归作者所有。请勿转载和采集!