手把手教你用Python绘制三维核密度演化图
一款基于 ttkbootstrap 的三维核密度分析工具,支持宽表/长表数据、多视角对比、分组子图等功能。
一、什么是三维核密度图?
核密度估计(Kernel Density Estimation,KDE)是一种非参数概率密度估计方法,能够平滑地展示数据的分布特征。将多个年份的核密度曲线沿时间轴堆叠,就形成了三维核密度演化图,可以直观地展示数据分布随时间的演变趋势。
典型应用场景:
二、工具功能亮点
1. 灵活的数据格式支持
支持两种常见数据格式:
宽表格式:
长表格式:
程序会自动识别列名,通过下拉框选择对应字段,无需手动修改数据格式。
2. 五大可视化模块
3. 丰富的参数调节
KDE参数:
绘图参数:
- • 配色:viridis、plasma、coolwarm 等多种色图
- • 字体:支持 SimHei、Microsoft YaHei 等
4. 年份筛选功能
支持选择部分年份进行分析,无需修改原始数据。例如,数据包含2010-2023年,可以只选择2015-2020年进行绘图。
5. 分组对比分析
三、技术实现要点
1. 核心依赖库
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom scipy.stats import gaussian_kdeimport ttkbootstrap as ttk
2. KDE计算核心代码
from scipy.stats import gaussian_kdedef compute_kde(values, bw_method=0.35, grid_points=150): """计算核密度估计""" kde = gaussian_kde(values, bw_method=bw_method) x_grid = np.linspace(min(values), max(values), grid_points) density = kde(x_grid) return x_grid, density
3. 三维曲面绘制
from mpl_toolkits.mplot3d import Axes3Dfig = plt.figure(figsize=(12, 8))ax = fig.add_subplot(111, projection='3d')# 绘制曲面surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='white', linewidth=0.2, antialiased=True, alpha=0.95)# 添加色标fig.colorbar(surf, ax=ax, shrink=0.5, aspect=20)
4. ttkbootstrap 界面
使用 ttkbootstrap 构建现代化 GUI 界面:
import ttkbootstrap as ttkfrom ttkbootstrap.constants import *class App(ttk.Window): def __init__(self): super().__init__( title="三维核密度分析工具", themename="cosmo", size=(1450, 920), )
四、使用流程
Step 1:准备数据
将数据整理为宽表或长表格式,保存为 .xlsx、.xls 或 .csv 文件。
Step 2:读取文件
点击"浏览"选择数据文件,然后点击"读取文件"按钮,程序会自动识别列名。
Step 3:配置字段
根据数据格式选择"宽表"或"长表",并在下拉框中选择对应的列名。
Step 4:加载数据
点击"加载数据"按钮,程序会将数据转换为标准格式并显示统计信息。
Step 5:计算核密度
调整KDE参数(带宽、网格点数等),点击"计算核密度"按钮。
Step 6:绑定绘图
选择绘图类型(单图、多视角、分组子图等),调整绘图参数,点击对应按钮生成图表。
Step 7:保存结果
点击"保存当前图"按钮,可将图表保存为 PNG、PDF 等格式。
五、运行
运行程序
3D_Density_v1.1.exe
六、效果展示
单图主视图
标准三维核密度曲面图,支持鼠标拖拽旋转视角,便于从不同角度观察数据分布演化特征。
多视角对比
2×2 布局同时展示四个视角:
- • 平视:从侧面观察

分组子图
将省份按顺序均分为若干组,每组绘制一个三维子图,统一色标便于对比不同区域的发展差异。
七、常见问题
Q1:中文显示乱码?
程序默认使用 SimHei 字体,确保系统已安装该字体。如需更换,可在"绘图参数"中选择其他中文字体。
Q2:曲面过于平滑/粗糙?
调整"带宽(bw)"参数:
Q3:如何选择合适的视角?
- • 仰角(elev):控制上下倾斜角度,25-45度效果较好
- • 方位角(azim):控制水平旋转角度,-60到-30度效果较好
Q4:分组子图太多看不清?
使用分页功能,每页最多显示9个子图,点击"上一页/下一页"切换。
八、获取软件
关注公众号、私信作者。