数据可视化工具:性别和特征的图形展示
def vision():
# 创建主窗口
vision_desk = tk.Tk()
vision_desk.title('数据可视化')
vision_desk.geometry('800x600')
# 创建下拉列表选择性别
gender_label = ttk.Label(vision_desk, text='请选择性别')
gender_label.pack(pady=10)
gender_var = tk.StringVar(value='男')
gender_combobox = ttk.Combobox(vision_desk, textvariable=gender_var, values=['男', '女'])
gender_combobox.pack()
# 创建下拉列表选择特征
feature_label = ttk.Label(vision_desk, text='请选择图的特征')
feature_label.pack(pady=10)
feature_var = tk.StringVar(value='forehead_width_cm')
feature_combobox = ttk.Combobox(vision_desk, 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(vision_desk, width=600, height=400)
canvas.pack(pady=20)
def update_plot():
# 清空画布上的内容
for widget in canvas.winfo_children():
widget.destroy()
# 获取选择的性别和特征
gender = 1 if gender_combobox.get() == '男' else 0
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
# 绘制直方图
fig, ax = plt.subplots()
ax.hist(df, bins=np.arange(df.min(), df.max()+bin_width, bin_width), align='mid', histtype='bar', rwidth=0.8)
ax.set_xlabel(feature)
ax.set_ylabel('count')
plt.show()
else:
# 绘制柱状图
fig, ax = plt.subplots()
ax.bar([0, 1], [data[(data['gender'] == gender) & (data[feature] == 0)].shape[0], data[(data['gender'] == gender) & (data[feature] == 1)].shape[0]])
ax.set_xticks([0, 1])
ax.set_xticklabels(['0', '1'])
ax.set_xlabel(feature)
ax.set_ylabel('count')
ax.set_title(f'{feature} ({gender})')
# 将图像转换为画布上的图片
fig_canvas = FigureCanvasTkAgg(fig, master=canvas)
fig_canvas.draw()
fig_canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
# 保存图像
plt.savefig('temp.png')
# 创建按钮,并绑定更新图的函数
update_button = ttk.Button(vision_desk, text='更新图', command=update_plot)
update_button.pack(pady=10)
# 运行主循环
vision_desk.mainloop()
该代码使用Tkinter和Matplotlib库构建一个简单的数据可视化工具。用户可以从下拉列表中选择性别和特征,然后点击“更新图”按钮生成对应的图形。
功能说明:
- 性别选择: 使用下拉列表,用户可以选择“男”或“女”。
- 特征选择: 使用下拉列表,用户可以选择要可视化的特征,例如“forehead_width_cm”、“forehead_height_cm”等等。
- 图形生成: 根据选择的性别和特征,代码会生成直方图或柱状图,并在Tkinter窗口的画布上展示。
- 代码优化:
- 将性别变量的值改为0或1,而不是根据选择的字符串来确定,避免KeyError。
使用方法:
- 确保已安装Tkinter和Matplotlib库。
- 创建包含所需数据的DataFrame(data)。
- 运行代码。
- 从下拉列表中选择性别和特征,点击“更新图”按钮即可生成相应的图形。
注意:
- 代码中的data DataFrame需要预先定义,包含要可视化的数据。
- 代码中的特征名称需要与data DataFrame中的列名一致。
- 代码中的图形类型需要根据实际数据的类型和需求进行调整。
示例:
假设data DataFrame包含以下数据:
data = pd.DataFrame({'gender': [1, 0, 1, 1, 0], 'forehead_width_cm': [10.5, 9.8, 11.2, 10.1, 9.5], 'forehead_height_cm': [8.2, 7.9, 8.5, 8.1, 7.6]})
用户可以选择“男”和“forehead_width_cm”,那么代码将会生成一个包含所有男性个体前额宽度数据的直方图。
结论:
该代码提供了一个简单的数据可视化工具,能够根据用户的选择生成直方图或柱状图。用户可以根据自己的需求调整代码中的参数和图形类型,以满足不同的数据可视化需求。
原文地址: https://www.cveoy.top/t/topic/fYT4 著作权归作者所有。请勿转载和采集!