当前位置:首页>python>手把手教你用Python绘制三维核密度演化图

手把手教你用Python绘制三维核密度演化图

  • 2026-09-25 11:06:38
手把手教你用Python绘制三维核密度演化图

手把手教你用Python绘制三维核密度演化图

一款基于 ttkbootstrap 的三维核密度分析工具,支持宽表/长表数据、多视角对比、分组子图等功能。

一、什么是三维核密度图?

核密度估计(Kernel Density Estimation,KDE)是一种非参数概率密度估计方法,能够平滑地展示数据的分布特征。将多个年份的核密度曲线沿时间轴堆叠,就形成了三维核密度演化图,可以直观地展示数据分布随时间的演变趋势。

典型应用场景:

  • • 区域经济发展差异的时空演化分析
  • • 居民收入分布的动态变化研究
  • • 环境指标时空分布特征分析
  • • 任何需要展示"分布如何随时间变化"的研究场景
  • 文末有演示视频!

二、工具功能亮点

1. 灵活的数据格式支持

支持两种常见数据格式:

宽表格式:

province
2018
2019
2020
2021
北京
0.85
0.87
0.89
0.91
上海
0.82
0.84
0.86
0.88

长表格式:

province
year
value
北京
2018
0.85
北京
2019
0.87
上海
2018
0.82

程序会自动识别列名,通过下拉框选择对应字段,无需手动修改数据格式。

2. 五大可视化模块

模块
功能说明
📊 数据预览
查看原始数据表格,确认数据加载正确
📈 单图主视图
绘制标准三维核密度曲面,支持视角调整
📐 多视角对比
2×2布局展示默认、后方、俯视、平视四个视角
📑 分组子图
按省份分组绘制多个三维子图,对比不同区域
📉 二维核密度图
传统二维核密度曲线图,便于对比分析

3. 丰富的参数调节

KDE参数:

  • • 带宽(bw):控制核密度的平滑程度
  • • 网格点数:横轴插值点数量
  • • 边距(pad):横轴两端留白

绘图参数:

  • • 视角:仰角(elev)、方位角(azim)
  • • 配色:viridis、plasma、coolwarm 等多种色图
  • • 字体:支持 SimHei、Microsoft YaHei 等
  • • 字号:标题、标签、刻度可分别设置
  • • 轴标注:X/Y/Z轴标签、色标标签可自定义

4. 年份筛选功能

支持选择部分年份进行分析,无需修改原始数据。例如,数据包含2010-2023年,可以只选择2015-2020年进行绘图。

5. 分组对比分析

  • • 自动按省份均分为若干组
  • • 支持手动配置分组方案
  • • 分页展示,每页最多9个子图
  • • 统一色标,便于跨组对比

三、技术实现要点

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 布局同时展示四个视角:

  • • 默认视角:斜45度俯视
  • • 后方视角:从背面观察
  • • 俯视:从正上方观察
  • • 平视:从侧面观察

分组子图

将省份按顺序均分为若干组,每组绘制一个三维子图,统一色标便于对比不同区域的发展差异。

二维核密度图

七、常见问题

Q1:中文显示乱码?

程序默认使用 SimHei 字体,确保系统已安装该字体。如需更换,可在"绘图参数"中选择其他中文字体。

Q2:曲面过于平滑/粗糙?

调整"带宽(bw)"参数:

  • • 带宽越大,曲面越平滑
  • • 带宽越小,曲面越能反映数据细节

Q3:如何选择合适的视角?

  • • 仰角(elev):控制上下倾斜角度,25-45度效果较好
  • • 方位角(azim):控制水平旋转角度,-60到-30度效果较好

Q4:分组子图太多看不清?

使用分页功能,每页最多显示9个子图,点击"上一页/下一页"切换。

八、获取软件

关注公众号、私信作者。


最新文章

随机文章