Python Tkinter 数据可视化:性别筛选散点图和柱状图
首先,需要导入必要的模块:tkinter、matplotlib和pandas。
import tkinter as tk
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# 读取数据集
data = pd.read_csv('data.csv')
# 创建主界面
root = tk.Tk()
root.title('数据可视化')
# 创建下拉列表
gender_var = tk.StringVar(value='男')
gender_option = tk.OptionMenu(root, gender_var, '男', '女')
gender_option.pack()
# 创建图形容器
figure_container = tk.Frame(root)
figure_container.pack()
# 创建散点图
def scatter_plot():
# 获取选择的性别
gender = 1 if gender_var.get() == '男' else 0
# 创建散点图
fig, ax = plt.subplots()
ax.scatter(data.loc[data['gender'] == gender, 'forehead_width_cm'],
data.loc[data['gender'] == gender, 'forehead_height_cm'])
ax.set_xlabel('forehead_width_cm')
ax.set_ylabel('forehead_height_cm')
# 显示图形
canvas = FigureCanvasTkAgg(fig, figure_container)
canvas.draw()
canvas.get_tk_widget().pack()
# 创建柱状图
def bar_plot():
# 获取选择的性别
gender = 1 if gender_var.get() == '男' else 0
# 创建柱状图
fig, ax = plt.subplots()
data_bar = data.loc[data['gender'] == gender, ['long_hair', 'nose_wide', 'nose_long', 'lips_thin', 'distance_nose_to_lip_long']]
data_bar.sum().plot(kind='bar', ax=ax)
# 显示图形
canvas = FigureCanvasTkAgg(fig, figure_container)
canvas.draw()
canvas.get_tk_widget().pack()
# 创建按钮
scatter_button = tk.Button(root, text='显示散点图', command=scatter_plot)
scatter_button.pack()
bar_button = tk.Button(root, text='显示柱状图', command=bar_plot)
bar_button.pack()
# 运行主界面
root.mainloop()
解释一下代码:
首先,我们导入了必要的模块,包括tkinter、matplotlib和pandas。然后,我们读取了数据集,这里假设数据集的文件名为'data.csv'。
接下来,我们创建了主界面,并设置了标题为'数据可视化'。
然后,我们创建了一个下拉列表,用于选择性别。这里我们使用了tkinter中的StringVar和OptionMenu组件。
接着,我们创建了一个图形容器,用于显示图形。这里我们使用了tkinter中的Frame组件。
然后,我们分别创建了散点图和柱状图的函数。这里我们使用了matplotlib中的scatter和bar函数。
最后,我们创建了两个按钮,分别用于显示散点图和柱状图。这里我们使用了tkinter中的Button组件。
最后,我们运行主界面。运行后,我们就可以选择性别,并查看对应的散点图和柱状图了。随着选择的改变,图也会在本窗口中改变。
原文地址: https://www.cveoy.top/t/topic/ozVG 著作权归作者所有。请勿转载和采集!