完整代码获取关注微信公众号“八宝粥的科研日记”回复“Spearman小提琴图”即可获得通道
本程序是一套基于 Python 语言实现的多变量统计可视化工具,其核心目的在于将 Excel 表格中多个连续型或等级型数值变量,转化为兼具分布展示、变量间关系展示和相关性显著性提示的组合式图形。程序输出图形包含两个相互补充的信息层面:其一,左侧水平小提琴图用于描述每个变量的单变量分布形态、集中趋势和离散程度;其二,右侧成对关系矩阵用于呈现任意两个变量之间的散点关系、秩相关系数和显著性标记。通过该组合图,研究者可以在同一幅图中同时观察变量自身分布和变量间相互关系,从而为后续变量筛选、机制解释、模型构建或敏感性分析提供描述性依据。
该图用于综合展示研究变量的分布特征及变量之间的相关关系。图形由两个部分组成:左侧为变量分布图,右侧为 Spearman 相关性矩阵图。两部分从单变量分布和多变量关联两个层面揭示数据结构特征,可用于观察变量离散程度、分布形态、变量间相关方向、相关强度及其统计显著性。图(a)主要反映各变量在样本中的分布形态、集中程度、离散程度及潜在异常值;图(b)进一步揭示不同变量之间的相关方向、相关强度及统计显著性。两部分结合能够较为全面地呈现数据的基本结构。若某些变量在分布图中表现出较高的离散性,同时在相关矩阵中与多个变量存在显著相关关系,则说明这些变量可能在研究系统中具有较高的信息贡献或较强的结构关联。若部分变量之间相关系数较高,则提示这些变量可能存在较强的共变关系,在后续回归分析、结构方程模型或其他多变量模型构建中需要关注潜在共线性问题。
不同配色效果展示:
一、左侧面板(a):水平小提琴图
图(a)展示了不同研究变量的分布情况。纵轴表示纳入分析的各类变量,横轴表示变量取值或经过统一处理后的变量值。每一行对应一个变量的样本分布。图中的小提琴形状表示变量取值的核密度分布,其宽度反映不同取值区间内样本出现的相对频率。小提琴越宽,说明该区间内样本越集中;小提琴越窄,说明该区间内样本数量相对较少。若小提琴形态较为对称,说明该变量的样本分布相对均衡;若小提琴形态明显偏向某一侧,则提示该变量可能存在偏态分布。若小提琴图呈现较宽的分布范围,则说明该变量在样本间具有较大的变异程度;若分布范围较窄,则说明该变量取值相对集中。
图(a)中叠加的散点表示单个样本观测值。散点在横轴上的位置反映该样本在对应变量上的取值大小,纵向上的轻微分散主要用于减少样本点重叠,使数据分布更加清晰。散点越密集,说明该取值范围内样本越集中;散点越分散,说明变量在样本间的差异越明显。若存在远离主体分布区域的散点,则可能提示该变量中存在极端值或潜在异常样本。小提琴图与散点图结合后,既能够展示总体分布轮廓,也能够保留单个样本的分布信息,从而比单纯使用均值、标准差或箱线图更充分地反映数据特征。
图(a)中的颜色主要用于区分不同变量并增强图形的视觉层次。颜色由浅至深或由暖色至冷色变化,可使不同变量之间的分布差异更加直观。除非研究中对颜色赋予了特定的分组或梯度含义,否则颜色本身不直接代表变量大小或变量重要性。因此,在解释该部分图形时,应重点关注小提琴图的宽窄、形态、对称性、散点密度以及离群点分布,而不应仅根据颜色深浅判断变量差异。
二、右侧面板(b):Spearman相关性矩阵图
图(b)为 Spearman 相关性矩阵,用于展示多个研究变量之间的两两相关关系。矩阵的横轴和纵轴均表示纳入分析的变量,因此矩阵中的每一个单元格都对应一对变量之间的关系。Spearman 相关分析属于非参数相关分析方法,不要求变量严格服从正态分布,适用于连续变量、等级变量以及不完全满足线性关系假设的数据。其相关系数取值范围为 -1 至 1。相关系数大于 0 表示两个变量之间存在正向单调关系,即一个变量增加时,另一个变量总体上也趋于增加;相关系数小于 0 表示两个变量之间存在负向单调关系,即一个变量增加时,另一个变量总体上趋于降低;相关系数接近 0 则说明两个变量之间的单调相关关系较弱。图(b)的对角线区域展示了各变量自身的分布情况。对角线单元格中的柱状图表示变量取值的频数分布,曲线表示变量取值的核密度估计。该部分可用于判断变量是否存在集中分布、偏态分布、多峰分布或较强离散性。若某一变量的分布曲线较窄且峰值较高,说明该变量取值较为集中;若分布曲线较宽,说明该变量在样本间差异较大;若曲线出现多个峰值,则提示该变量可能存在潜在分组结构或样本异质性。图(b)的左下三角区域展示变量两两组合的散点分布。每个小图对应一对变量之间的样本分布关系。散点的排列方向能够直观反映变量间关系的基本趋势。若散点整体由左下向右上分布,说明两个变量可能具有正相关关系;若散点整体由左上向右下分布,说明两个变量可能具有负相关关系;若散点呈无明显方向的云团状分布,则说明两个变量之间的相关关系较弱。散点聚集程度还可以反映变量关系的稳定性。散点越接近某一方向性趋势,说明变量之间的相关关系越明显;散点越分散,说明这种关系越弱,或可能受到其他因素的影响。图(b)的右上三角区域展示 Spearman 相关系数及其统计显著性。单元格中的数字表示两个变量之间的 Spearman 相关系数。数值的正负代表相关方向,数值的绝对值大小代表相关强度。相关系数绝对值越接近 1,说明两个变量之间的单调相关关系越强;绝对值越接近 0,说明变量之间的相关关系越弱。单元格中的星号表示相关性检验的显著性水平。通常情况下,“”表示 P < 0.05,“”表示 P < 0.01,“”表示 P < 0.001。星号越多,说明该相关关系在统计检验中越显著。但显著性水平会受到样本量影响,因此在论文分析中应同时关注相关系数大小、显著性水平和实际研究意义,不能仅依据星号数量判断变量关系的重要性。图(b)右侧的颜色条表示 Spearman 相关系数的取值范围。颜色从负相关到正相关连续变化,用于反映相关关系的方向和强度。暖色通常表示负相关,冷色或紫色通常表示正相关,颜色越深表示相关系数绝对值越大,变量间相关关系越强;颜色越接近中性色,说明相关系数越接近 0,变量间相关关系越弱。通过颜色编码,可以快速识别变量之间的整体关联格局,并判断哪些变量之间具有较强的协同变化或相反变化趋势。
三、代码运行逻辑
1.输入数据结构
程序通过 pd.read_excel(INPUT_EXCEL) 读取 Excel 文件,并默认将 Excel 第一行识别为变量名称。当前代码会将所有列均纳入分析,因此输入文件中应仅保留需要参与绘图和 Spearman 相关分析的数值变量。每一列代表一个变量,每一行代表一个观察对象、实验样本或研究个体。
数据位置 | 含义 | 写作与使用建议 |
第一行 | 变量名称 | 将直接显示为左侧变量标签和右侧矩阵底部变量标签,建议使用简洁、规范且与论文一致的变量名。 |
每一列 | 一个待分析变量 | 应为数值型数据;文本、编号、分组标签不应直接放入分析矩阵。 |
每一行 | 一个样本或观察单位 | 同一行中各列数值应来自同一研究对象或同一实验样本。 |
数据范围 | 完整矩阵数据 | 不建议出现合并单元格、空标题、单位说明行或图表对象。 |
变量数量 | 矩阵阶数 n | 变量数越多,右侧矩阵越密集;博士论文主图中建议控制在可读范围内。 |
2. 缺失值处理原则
程序在读取数据后执行 df = df.dropna(),即删除任一变量存在缺失值的整行样本。该处理方式可保证后续小提琴图、散点图和 Spearman 相关计算使用同一组完整样本,避免由于局部缺失导致图形或统计结果报错。
需要注意的是,整行删除属于完全案例分析策略。当缺失值比例较低且随机分布时,该策略可作为较为简便的预处理方式;但当缺失值比例较高、缺失机制并非完全随机,或不同变量缺失模式差异明显时,整行删除可能导致有效样本量下降和估计偏倚。因此,在博士论文正式写作中,应说明缺失值处理方式,并根据研究设计判断是否需要采用插补、敏感性分析或其他缺失数据处理方法。
3. Spearman 秩相关分析原理
程序在右侧矩阵上三角区域调用 spearmanr(data_x, data_y) 计算任意两个变量之间的 Spearman 秩相关系数及对应的 p 值。Spearman 相关系数通常记为 ρ,其取值范围为 -1 至 +1,用于刻画两个变量之间单调关系的方向与强度。与 Pearson 相关相比,Spearman 相关基于变量秩次而非原始数值,因此对非正态分布、异常值影响以及等级型变量具有更好的适用性。
统计量 | 含义 | 论文解释方式 |
ρ > 0 | 正向单调相关 | 一个变量取值升高时,另一个变量总体上也倾向于升高。 |
ρ < 0 | 负向单调相关 | 一个变量取值升高时,另一个变量总体上倾向于降低。 |
ρ ≈ 0 | 单调相关较弱 | 两个变量之间未表现出明显单调关系,但不排除非单调或复杂关系。 |
|ρ| 越接近 1 | 相关强度越高 | 样本秩次排列越一致或越相反。 |
p 值 | 显著性检验结果 | 用于评估在零相关假设下观察到当前相关程度的统计证据强弱。 |
4. 显著性标记与解释边界
图中标记 | p 值阈值 | 解释 |
*** | p < 0.001 | 统计证据很强,表示两变量间秩相关达到极显著水平。 |
** | p < 0.01 | 统计证据较强,表示两变量间秩相关达到高度显著水平。 |
* | p < 0.05 | 达到常用显著性阈值,表示两变量间秩相关具有统计学意义。 |
无星号 | p ≥ 0.05 | 未达到预设显著性阈值,不宜写作“存在显著相关”。 |
四、示范图解读:


图中展示了各指标的残差分布特征及指标间的 Spearman 相关关系。图(a)为各指标的残差小提琴图,图(b)为指标间相关性矩阵。通过该图可以同时观察不同指标在模型拟合或标准化处理后的偏离特征,以及各指标之间的协同变化或相反变化关系。
由图(a)可见,各指标残差总体上主要分布在 0 附近,说明多数指标在整体上未表现出明显的系统性偏离,模型或数据处理结果具有一定稳定性。然而,不同指标之间的残差分布形态存在差异,表明各指标在样本中的离散程度和未解释波动并不完全一致。EDU 的残差主要集中在 0 附近,小提琴图形态相对集中,说明该指标整体波动较小,样本间差异相对有限。FOD 和 SHOP 的残差分布范围较宽,散点在横轴方向上扩展较明显,提示这两个指标在不同样本间存在较强异质性,其实际观测值与拟合值或中心趋势之间的偏离程度较大。特征指标的残差分布相对均衡,整体围绕 0 展开,说明该指标的偏离方向较为对称,未表现出明显单侧偏移。
SPORT、PARK 和 CULT 的残差分布也主要集中在 0 附近,但三者的离散程度存在差别。其中,SPORT 和 PARK 的残差分布较为集中,说明其样本间波动相对稳定;CULT 的残差范围相对更宽,提示该指标在不同样本中可能受到更多外部因素或空间异质性的影响。TRANS 的残差分布具有一定宽度,说明交通相关指标在样本中存在一定差异,但整体仍围绕中心区域分布。SEN 的小提琴图明显较窄,散点高度集中,说明该指标残差波动较小,样本间差异相对稳定。HLTH 的残差分布范围较宽,且散点分布较为分散,表明健康相关指标在不同样本间存在较明显差异,可能具有较高的空间异质性或样本异质性。总体来看,图(a)说明各指标的残差虽然整体围绕 0 分布,但 FOD、SHOP、CULT 和 HLTH 等指标表现出更强的离散性,提示这些指标在后续解释和建模中需要重点关注其样本差异和潜在影响因素。
图(b)进一步揭示了各指标之间的相关结构。从整体上看,EDU 与特征、TRANS、SEN 和 HLTH 之间呈显著正相关,其中 EDU 与特征的相关系数最高,为 0.819,达到极显著水平,说明二者之间具有很强的协同变化关系。EDU 与 SEN 和 HLTH 的相关系数分别为 0.759 和 0.754,也均达到极显著水平,表明教育相关指标与敏感性或服务水平、健康相关指标之间存在较强正向关联。EDU 与 TRANS 的相关系数为 0.591,说明教育指标与交通相关指标之间也存在中等偏强的正相关关系。此外,EDU 与 PARK 呈较弱但显著的正相关关系,相关系数为 0.220;与 SPORT 的相关系数为 0.130,虽然达到显著水平,但相关强度较弱。EDU 与 CULT 的相关系数接近 0,说明二者之间基本不存在明显单调相关关系。FOD 与 SHOP 之间呈显著正相关,相关系数为 0.368,说明两类指标在样本中具有一定协同变化趋势。但 FOD 与 EDU、特征、PARK、TRANS、SEN 和 HLTH 多呈显著负相关关系。其中,FOD 与特征的相关系数为 -0.384,与 SEN 的相关系数为 -0.352,与 TRANS 的相关系数为 -0.329,均达到极显著水平,说明 FOD 与这些指标之间存在较稳定的反向变化关系。SHOP 的相关模式与 FOD 较为相似。SHOP 与 EDU、特征、PARK、TRANS、SEN 和 HLTH 均呈显著负相关,其中 SHOP 与 EDU 的相关系数为 -0.369,与特征的相关系数为 -0.329,与 TRANS 的相关系数为 -0.321,说明 SHOP 与教育、综合特征及交通相关指标之间存在较明显的负向关系。这一结果表明,FOD 和 SHOP 可能代表了与 EDU、特征、TRANS、SEN 和 HLTH 不同的变量维度,二者与后者之间可能存在空间分异或功能结构上的差异。SPORT、PARK 和 CULT 之间表现出较强的正相关关系。其中,SPORT 与 PARK 的相关系数为 0.728,SPORT 与 CULT 的相关系数为 0.643,PARK 与 CULT 的相关系数为 0.651,均达到极显著水平。这说明体育、绿地或公园、文化类指标之间具有高度一致的变化趋势,可能共同反映公共服务设施、生活环境质量或空间功能配置水平。PARK 与 TRANS 的相关系数为 0.671,SPORT 与 TRANS 的相关系数为 0.564,CULT 与 TRANS 的相关系数为 0.470,说明交通条件与这些公共服务类指标之间也存在较明显的正向联系,交通可达性可能与相关设施或空间功能配置具有较强耦合关系。特征指标与 EDU、TRANS、SEN 和 HLTH 均呈显著正相关。其中,特征与 HLTH 的相关系数为 0.758,与 SEN 的相关系数为 0.746,与 EDU 的相关系数为 0.819,与 TRANS 的相关系数为 0.588,说明特征指标与教育、健康、交通和敏感性相关指标之间具有较强关联。这表明该特征指标可能具有较高的综合解释能力,能够较好地反映多个指标共同变化形成的整体结构。与此同时,特征与 FOD 和 SHOP 均呈显著负相关,相关系数分别为 -0.384 和 -0.329,进一步说明特征指标与 FOD、SHOP 所代表的变量维度存在方向上的差异。TRANS 在相关矩阵中表现出较强的连接作用。TRANS 不仅与 EDU、特征、SPORT、PARK、CULT、SEN 和 HLTH 均呈显著正相关,而且相关强度多处于中等及以上水平。特别是 TRANS 与 PARK 的相关系数为 0.671,与 EDU 的相关系数为 0.591,与特征的相关系数为 0.588,与 SPORT 的相关系数为 0.564,与 SEN 和 HLTH 的相关系数分别为 0.491 和 0.418。这说明交通相关指标可能在不同类型指标之间具有桥梁作用,既与公共服务类指标有关,也与教育、健康和综合特征类指标存在联系。因此,TRANS 可能是影响研究对象空间联系和功能耦合的重要指标。SEN 与 HLTH 之间呈显著正相关,相关系数为 0.694,说明二者具有较强协同变化特征。SEN 同时与 EDU、特征和 TRANS 也表现出显著正相关,表明 SEN 可能与教育水平、综合特征和交通条件密切相关。HLTH 与 EDU、特征、SEN 和 TRANS 之间同样呈显著正相关,说明健康相关指标可能受多类空间或社会环境因素共同影响。但 HLTH 与 SPORT 和 PARK 的相关性较弱,且与 CULT 呈弱负相关,说明健康相关指标与部分公共服务类指标之间的关系并不完全一致,可能受到其他因素的调节。从相关结构上看,图(b)大致呈现出三个变量组合特征。第一类为 EDU、特征、TRANS、SEN 和 HLTH,它们之间多表现为中等至强正相关,说明这些指标可能共同构成一个较为稳定的正向关联模块。第二类为 SPORT、PARK 和 CULT,它们之间相关性较强,并与 TRANS 保持显著正相关,说明公共服务或空间设施类指标具有较强内部一致性,同时与交通条件联系紧密。第三类为 FOD 和 SHOP,二者彼此呈正相关,但与 EDU、特征、TRANS、SEN 和 HLTH 多呈负相关,说明它们可能代表不同于前两类指标的空间属性或功能方向。
综合图(a)和图(b)可以看出,各指标不仅在残差分布上表现出不同程度的离散性,而且在相关关系上形成了较清晰的结构分组。残差分布较宽的指标,如 FOD、SHOP、CULT 和 HLTH,说明其在样本中的异质性较强;同时,这些指标在相关矩阵中又与其他指标表现出不同方向和强度的关系,提示其可能在解释研究对象差异方面具有重要作用。相关系数较高的指标组合,如 EDU 与特征、EDU 与 SEN、EDU 与 HLTH、特征与 SEN、特征与 HLTH、SPORT 与 PARK、PARK 与 TRANS 等,说明这些指标之间存在较强共变关系,后续在回归分析、综合评价或结构方程模型中应关注潜在共线性问题。
五、操作流程
本流程面向第一次在电脑上运行 Python 科研绘图代码的用户,内容覆盖 Python 安装、编辑器安装、项目文件夹建立、虚拟环境配置、依赖库安装、Notebook 运行、输出文件检查和常见问题处理。该流程以 Windows 系统为主,同时提供 macOS 和 Linux 的替代命令。
本代码的输入为 Excel 表格,输出为两类图形文件。代码运行后会生成高分辨率 PNG 图像和 PDF 图像,适合用于论文、报告和后期排版。
(1)左侧面板用于展示各变量取值或残差的分布形态,包括小提琴图、散点、四分位线和中位数线。
(2)右侧面板用于展示各变量之间的两两关系,包括对角线分布图、下三角散点图、上三角 Spearman 相关系数和显著性标记。
(3)代码已经将参数配置区和核心执行区分开。一般情况下,只需要修改输入文件名、输出文件名、画布大小、字体和颜色参数,不建议随意修改核心执行逻辑。
1.安装 Python
(1)Windows 系统安装步骤
进入 Python 官方下载页面,下载适合 Windows 的稳定版安装程序。
运行安装程序。安装界面底部通常会出现“Add Python to PATH”选项,建议勾选。该选项用于让系统终端能够直接识别 Python 命令。
点击“Install Now”或根据需要选择自定义安装。普通用户直接使用默认安装即可。
安装完成后,打开“命令提示符”或 PowerShell,检查 Python 是否安装成功。
python --version
pip --version
如果电脑中同时存在多个 Python 版本,Windows 系统也可以使用以下命令检查 Python 启动器。
py --version
py -0p
如果上述命令能够显示 Python 版本号和 pip 版本号,说明 Python 基础安装成功。
(2)macOS 或 Linux 系统检查方式
macOS 和 Linux 可能自带 Python,但科研绘图建议使用独立安装或虚拟环境管理。可以先在终端中运行以下命令检查。
python3 --version
python3 -m pip --version
如果系统提示找不到 Python 或 pip,需要根据系统安装方式重新安装 Python。
2.安装 Python 编辑器
(1)推荐方案:Visual Studio Code
Visual Studio Code 体积较轻,适合运行本代码对应的 Notebook 文件。其官方 Python 扩展支持代码补全、解释器选择、调试和多环境切换;Jupyter 扩展支持直接打开和运行 .ipynb 文件。
步骤1:进入 Visual Studio Code 官方网站并下载安装程序。
步骤2:安装完成后启动 Visual Studio Code。
步骤3:打开左侧扩展面板,搜索并安装 Python 扩展。
步骤4:继续搜索并安装 Jupyter 扩展。
步骤5:打开项目文件夹后,使用命令面板选择当前虚拟环境对应的 Python 解释器。
Ctrl + Shift + P
Python: Select Interpreter
选择解释器时,应选择项目文件夹内虚拟环境对应的 Python。Windows 下通常显示为类似以下路径。
.venv\Scripts\python.exe
(2)备选方案:PyCharm
PyCharm 适合需要完整项目管理、运行配置和调试功能的用户。若使用 PyCharm,应在新建项目时选择本项目的虚拟环境,或在设置中手动指定解释器。
步骤1:安装 PyCharm。
步骤2:打开项目文件夹。
步骤3:进入项目设置中的 Python Interpreter。
步骤4:选择现有虚拟环境,路径指向项目文件夹内的 .venv。
步骤5:确认解释器后,在终端或运行配置中执行代码。
(3)浏览器方案:Jupyter Notebook
如果不想使用 VS Code 或 PyCharm,也可以直接在浏览器中运行 Notebook。该方法适合只需要运行代码、不需要复杂项目管理的用户。
jupyter notebook
命令执行后,浏览器会自动打开本地 Notebook 页面。用户在页面中进入项目文件夹,打开 .ipynb 文件并逐单元运行即可。
3.建立项目文件夹
为了避免路径混乱,建议将代码文件、Excel 数据文件和输出结果放在同一个项目文件夹内。不要将代码放在桌面随机位置,也不要将输入 Excel 文件放在其他路径后再使用相对路径读取。其中,.ipynb 和.py文件为代码文件;Excel 文件为输入数据;PNG 和 PDF 文件为代码运行后的输出结果。第一次运行前,输出文件可以不存在,代码会在运行完成后自动生成。
4.安装代码依赖库
代码运行前,需要安装本代码需要的所有第三方库。
在终端输入:pip install pandas numpy matplotlib seaborn scipy openpyxl jupyter ipykernel
安装完成后,可以运行以下命令检查依赖库是否能够正常导入。
python -c "import pandas, numpy, matplotlib, seaborn, scipy, openpyxl; print('环境配置成功')"
如果终端输出“环境配置成功”,说明基础依赖已经安装完成。
5.准备输入 Excel 数据
本代码通过 pandas 读取 Excel 表格。默认输入文件名为 示范数据.xlsx,因此 Excel 文件应放在项目文件夹中,并且文件名应与代码参数完全一致。
代码读取数据的核心语句如下。
INPUT_EXCEL = "示范数据.xlsx"
df = pd.read_excel(INPUT_EXCEL)
df = df.dropna()
这意味着输入 Excel 需要满足以下要求。
第一行为变量名称,变量名称会直接显示在图形坐标轴和矩阵标签中。
每一列对应一个研究变量,每一行对应一个样本。
用于绘图和相关性分析的列应尽量为数值型数据。
不要在数据区域中使用合并单元格。
不要在表头前方插入空行或说明文字。
如果数据中存在缺失值,代码会通过 dropna 删除包含缺失值的整行样本。缺失较多时,样本量会明显减少。
Excel 中变量列的排列顺序会决定左侧小提琴图的上下顺序,以及右侧矩阵的横纵轴顺序。
建议的数据表格式如下。

6.VS Code 是本流程推荐的运行方式
操作步骤如下。
步骤1:打开 VS Code。
步骤2:选择“File - Open Folder”,打开项目文件夹。
步骤3:打开 Spearman热图+小提琴图.ipynb 文件。
步骤4:在右上角选择 Notebook Kernel,选择前文注册的 Python (Spearman Violin) 内核。
步骤5:如果没有看到该内核,使用 Python: Select Interpreter 手动选择项目中的 .venv 解释器。
步骤6:确认 Excel 文件已经放在项目文件夹中,且文件名与 INPUT_EXCEL 一致。也可以手动替换Excel表名称。

步骤7:点击 “Run All” 运行全部单元格。

步骤8:等待终端或 Notebook 输出图表保存成功提示。
7.风格调整:


以上内容可以根据自己的需求进行修改编辑。
代码运行问题可添加微信详细咨询:zhouysh001(八宝粥加油)
完整代码获取关注微信公众号“八宝粥的科研日记”回复“Spearman小提琴图”即可获得通道