当前位置:首页>python>期刊图片复现|Python绘制带有边缘数据分布图的分组线性拟合图

期刊图片复现|Python绘制带有边缘数据分布图的分组线性拟合图

  • 2026-09-21 18:03:02
期刊图片复现|Python绘制带有边缘数据分布图的分组线性拟合图
请尊重原创成果,未经允许不得转载,谢谢

代码绘制成果展示

论文:Road‐Level Charging Gaps and Infrastructure Enhancements in Japan's Electric Vehicle Transition
论文原图
带有边缘分布直方图的分组线性拟合散点图:此图展示了四种不同地表覆盖类型——Grass(草地)、Land(陆地)、Water(水体)和Urban(城市区域)的数据及其线性相关关系。图中用对应颜色的散点表示具体数据,绘制了拟合趋势的虚线以及95%置信区间阴影带。左上角标注了各组别具体的线性回归方程、决定系数(R2)和显著性水平(p值),能够直观看出草地数据的正相关性最强且拟合优度最高,而城市区域的数据分布最为离散且斜率最为平缓。位于主图上方和右侧的边缘分布图分别由半透明的直方图和虚线形式的核密度估计曲线构成,揭示了不同区域数据的分布频率和数据密度。此图高度适用于地学、遥感、生态以及环境等交叉领域的研究中,例如分析城市热岛效应、评估不同土地利用/土地覆盖类型对地表热环境的调控作用、进行卫星遥感地表温度反演结果与地面气象站实测数据之间的精度验证与多组别对比分析。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport matplotlib.colors as mcolorsimport numpy as npimport pandas as pd

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#7BACD6', '#B2A1C7', '#C9BC9C', '#D48686'],}

第三部分

回归拟合图绘制函数:接收数据和配色方案。提取对应的颜色,根据数据中不重复的组别创建动态颜色映射字典。为每一组生成专属的线色、填充色、散点色以及加深的边缘色。
# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df, scheme_id):    selected_hex_colors = COLOR_SCHEMES[scheme_id]  # 获取配色方案    groups = df['Group'].unique().tolist()  # 获取所有的组别    # 构建各组别颜色字典    colors = {        # 为每个分组指定颜色        group: {            'line': selected_hex_colors[i % len(selected_hex_colors)],  # 线条颜色            'fill': selected_hex_colors[i % len(selected_hex_colors)],  # 柱子填充颜色            'point': selected_hex_colors[i % len(selected_hex_colors)],  # 散点颜色            'edge': darken_color(selected_hex_colors[i % len(selected_hex_colors)])  # 散点边缘颜色        }        for i, group in enumerate(groups)  # 遍历每个分组提取颜色    }    fill_palette = {k: v['fill'] for k, v in colors.items()}  # 提取填充颜色构建seaborn调色板

第四部分

回归拟合图绘制函数:创建画布以及网格布局设置
    # 创建画布    fig = plt.figure(figsize=(8, 7.5), dpi=300)    # 网格布局    gs = fig.add_gridspec(        2,  # 行        2,  # 列        width_ratios=[5, 1],  # 宽占比        height_ratios=[1, 5],  # 高占比        wspace=0.015,  # 水平间距        hspace=0.015  # 垂直间距    )    ax_joint = fig.add_subplot(gs[1, 0])  # 左下角散点图    ax_top = fig.add_subplot(gs[0, 0], sharex=ax_joint)  # 顶部直方图    ax_right = fig.add_subplot(gs[1, 1], sharey=ax_joint)  # 右侧直方图

第五部分

回归拟合图绘制函数:绘制数据分布图(直方图+密度曲线)、散点图
    # 绘制顶部直方图    sns.histplot(        data=df,  # 数据        x='GST',  # X轴数据        hue='Group',  # 按组别着色    )    ax_top_kde = ax_top.twinx()  # 创建顶部副Y轴用于KDE曲线    # 遍历各组别    for g in colors.keys():        # 绘制密度曲线        sns.kdeplot(            data=df[df['Group'] == g],  # 数据            x='GST',  # X轴变量        )    ax_top.axis('off')  # 隐藏顶部直方图坐标轴    ax_top_kde.axis('off')  # 隐藏顶部密度曲线坐标轴

第六部分

回归拟合图绘制函数:坐标轴设置、刻度线设置、文本标注、绘图结果的保存
    #x轴标题    ax_joint.set_xlabel('GST',  # 文本                        fontsize=14,  # 字号                        fontweight='bold',  # 加粗                        labelpad=8)  # 边距    ax_joint.tick_params(axis='both',  # 轴                         which='major',  # 主刻度                         labelsize=12,  # 字号                         width=1.5,  # 刻度线宽                         length=6,  # 刻度线长                         direction='out')  # 朝外

第七部分

执行部分:读取本地指定路径数据。初始化一个全局字典用于保存分析数据文本。按组提取数据,进行线性回归计算得出拟合斜率 (slope)、截距 (intercept) 和决定系数 (R2)。

计算出这组数据的 P 值 。文本格式化,设置p值显示样式,凭借公式。设置批量绘图开关。如果设为 True,循环遍历前面定义的包含60套方案的字典,批量生成并保存这些图;否则只绘制指定的单套方案进行绘制。

# =========================================================================================# ======================================5.执行部分=======================================# =========================================================================================if __name__ == '__main__':    df_real = pd.read_excel(r'data.xlsx')  # 读取数据    scheme_id = 1    print('正在绘制并保存方案:', scheme_id)    plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

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

df_real = pd.read_excel(r'data.xlsx')  # 读取数据

2.设置要使用的数据,执行部分:

for g in df_real['Group'].unique():        g_data = df_real[df_real['Group'] == g]  # 提取数据子集        X = g_data[['GST']]  # 提取X        y = g_data['LST']  # 提取Y

3.设置是否要进行批量绘图,执行部分:

plot_all = True

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

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

往期内容

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)
需要请后台私信我,注意只会分享练习数据、参考论文和代码文件,仅提供有关代码的答疑,不会提供其他答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章