在数据分析工作中,热图(Heatmap)是一种非常直观的可视化工具,能够清晰展示数据矩阵中的数值分布和相关性。本文将介绍如何使用Python构建一个支持CSV/XLS文件导入、热图生成并可打包为EXE的桌面应用程序。
核心功能设计
我们的热图工具将包含以下核心功能:
- 支持CSV和Excel(XLS/XLSX)文件导入
- 可自定义热图参数(颜色方案、标题、标签等)
- 提供交互式热图预览
- 支持热图导出为图片格式
- 可打包为独立EXE文件分发
技术选型
- 数据处理:Pandas (CSV/XLS文件解析与数据处理)
- 可视化:Matplotlib (热图生成)
- 用户界面:Tkinter (Python内置GUI库,无需额外安装)
- 打包工具:PyInstaller (将Python脚本打包为EXE)
下面是完整的实现代码:
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
import os
# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题
class HeatmapGenerator:
def __init__(self, root):
self.root = root
self.root.title("热图生成工具")
self.root.geometry("1000x700")
# 数据和配置
self.data = None
self.file_path = None
# 创建界面
self.create_widgets()
def create_widgets(self):
# 顶部菜单栏
menu_frame = tk.Frame(self.root)
menu_frame.pack(fill=tk.X, padx=10, pady=10)
# 文件选择按钮
tk.Button(menu_frame, text="打开CSV/XLS文件", command=self.load_file).pack(side=tk.LEFT, padx=5)
# 颜色方案选择
tk.Label(menu_frame, text="颜色方案:").pack(side=tk.LEFT, padx=5)
self.color_map = tk.StringVar(value="viridis")
color_options = ["viridis", "plasma", "inferno", "magma", "cividis",
"coolwarm", "RdBu", "YlGnBu", "Greens", "Reds"]
color_menu = ttk.Combobox(menu_frame, textvariable=self.color_map, values=color_options, width=10)
color_menu.pack(side=tk.LEFT, padx=5)
# 标题输入
tk.Label(menu_frame, text="热图标题:").pack(side=tk.LEFT, padx=<