当前位置:首页>python>Python绘制散点图+KDE图+边缘直方图组合图

Python绘制散点图+KDE图+边缘直方图组合图

  • 2026-10-11 07:34:23
Python绘制散点图+KDE图+边缘直方图组合图

代码绘制成果展示

成果图
此图为散点图、KDE等高线图以及边缘直方图的组合图,主要用于展示三个不同环境条件下(Land、Forest、City)“Ground Surface Temperature”和“Land Surface Temperature”的分布特征及相关性。散点图每个圆点代表一个独立的观测样本,不同的颜色代表Land、Forest、City等组别,渐变等高线直观地呈现了各组数据的二维概率密度分布情况,圈层越小且颜色越深的地方表示数据点越密集。左上角的文字注释详细列出了这三组数据关于这两个变量的Spearman秩相关系数和显著性P值。主图的正上方和正右侧分别设有堆叠边缘直方图,其对应的轴均为“Density”,分别展示了三个组别在GST和LST上的分布特征。
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsfrom matplotlib.gridspec import GridSpecfrom scipy.stats import spearmanrimport matplotlibmatplotlib.rcParams['pdf.fonttype'] = 42matplotlib.rcParams['ps.fonttype'] = 42plt.rcParams['font.family'] = 'Times New Roman'plt.rcParams['font.weight'] = 'bold'

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#A485C6', '#85C698', '#5C92D1'],}

第三部分

绘图函数:画布创建与网格布局初始化
# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_scatter_density(df, scheme_id=1):    color_list = COLOR_SCHEMES.get(scheme_id, COLOR_SCHEMES[1]) #提取配色方案    palette = {group: color_list[i % len(color_list)] for i, group in enumerate(df['Group'].unique())} #分配颜色    #创建画布    fig = plt.figure(figsize=(9, 8))    ax_main = fig.add_subplot(gs[1, 0]) #添加主图轴对象    ax_top = fig.add_subplot(gs[0, 0], sharex=ax_main) #顶部子图轴    ax_right = fig.add_subplot(gs[1, 1], sharey=ax_main) #右侧子图轴

第四部分

绘图函数:绘制二维核密度图KDE与散点图
    groups = df['Group'].unique()    #散点图    sns.scatterplot(data=df, #数据                    x='Ground Surface Temperature', #x轴                    y='Land Surface Temperature', #y轴                    hue='Group', #根据分组上色                    palette=palette, #配色                    ax=ax_main, #轴                    edgecolor='white', #散点边缘色                    alpha=0.9, #透明度                    s=50, #大小                    legend=False, #去掉自带图例                    zorder=2) #层

第五部分

绘图函数:绘制边缘直方图
    #顶部边缘直方图    sns.histplot(data=df, #数据                 x='Ground Surface Temperature', #X轴                 hue='Group', #分组绘制                 palette=palette, #配色                 ax=ax_top, #轴                 multiple="stack", #堆叠直方图                 stat="count", #分布密度                 common_norm=False, #各分组内部独立进行归一化                 element="bars", #柱状图                 alpha=0.5, #透明度                 edgecolor='grey', #边线色                 bins=15, #分箱                 legend=False) #去掉图例

第六部分

绘图函数:添加注释文本、轴标题设置
    ax_main.set_xlabel('Ground Surface Temperature', fontsize=16, fontweight='bold') #x轴标题        ax_main.text(0.03, #x                     y_pos, #y                     text_str, #文本                     transform=ax_main.transAxes, #坐标系                     fontsize=12, #字体大小                     fontweight='bold', #加粗                     color=palette[group], #颜色                     va='top', #垂直                     bbox=dict(boxstyle='round,pad=0.2', #圆角矩形                               facecolor='white', #填充色                               alpha=0.7, #透明度                               edgecolor='none')) #边框线颜色        y_pos -= 0.15 #更新y坐标

第七部分

绘图函数:刻度设置、边框设置、图例设置、绘图结果保存
    ax_top.tick_params(axis='x', #x                       labelbottom=False, #不显示标注                       length=0) #去掉刻度线    ax_top.tick_params(axis='y', #y轴                       length=6, #长                       width=1.5, #粗细                       labelsize=11) #字体大小    ax_top.set_xlabel('') #去掉标题    #设置边框    for ax in [ax_main, ax_top, ax_right]:        #去掉        ax.spines['top'].set_visible(False)        ax.spines['right'].set_visible(False)        #加粗        ax.spines['bottom'].set_linewidth(2.0)        ax.spines['left'].set_linewidth(2.0)

第八部分

执行部分
# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == '__main__':    excel_path = r"data.xlsx" #原始数据    df_final = pd.read_excel(excel_path) #读取数据    plot_all = True    if plot_all:        for scheme_id in COLOR_SCHEMES.keys():            plot_scatter_density(df_final, scheme_id=scheme_id)            print('正在绘制方案:', scheme_id)    else:        scheme_id = 22        plot_scatter_density(df_final, scheme_id=scheme_id)        print('正在绘制方案:',scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:

excel_path = r"data.xlsx" #原始数据

2.读取数据分析,执行部分:

r, p_val = spearmanr(sub_df['Ground Surface Temperature'], sub_df['Land Surface Temperature']) #分析

3.设置绘图结果的保存地址,绘图函数部分:

plt.savefig(fr"{scheme_id}.png", dpi=300, bbox_inches='tight')

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章