当前位置:首页>python>期刊图片复现|Python绘制堆叠柱状图+森林图复合统计图

期刊图片复现|Python绘制堆叠柱状图+森林图复合统计图

  • 2026-10-11 05:48:47
期刊图片复现|Python绘制堆叠柱状图+森林图复合统计图

代码绘制成果展示

论文:Freeze-thaw-induced greenhouse gas emissions from a Mollisol agroecosystem: Microbial and edaphic regulation under long-term agricultural management
论文原图
该图详细展示了不同预测因子对CO2、CH4和N2O三种温室气体排放通量的相对影响及其标准化回归系数。顶部图例用四种颜色分别代表四大类驱动因素。图片下方分为(a)、(b)、(c)三个子图,分别对应CO2、CH4和N2O的分析结果。每个子图的左侧是一个百分比堆叠柱状图,直观显示了四类因素对各温室气体排放通量变异的相对解释百分比;右侧的森林图则标出了各项具体参数的平均估计值(即标准化回归系数)及其95%置信区间,横坐标为参数估计值,变量名后的*代表显著性水平。
仿图
多种配色

代码解释

第一部分

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

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#3A74A5', '#FCB768', '#F27A79', '#1D908F'],}

第三部分

绘图函数:画布初始化与外层网格布局
# =========================================================================================# =====================================3.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df_real, scheme_id):    colors = COLOR_SCHEMES[scheme_id]  #提取配色方案    group_color_map = {list(VAR_GROUPS.keys())[i]: colors[i] for i in range(4)}  #变量与颜色映射    labels_abc = [f'({chr(97 + i)})' for i in range(num_plots)]  #生成子图编号)

第四部分

绘图函数:嵌套网格设置与左侧堆叠柱状图的绘制
    #遍历子图    for i, gas inenumerate(gas_names):        res = df_real[gas]  #提取当前子图数据        #设置当前子图布局        inner_gs = gridspec.GridSpecFromSubplotSpec(1,  #行                                                    2,  #列                                                    subplot_spec=outer_gs[i],  #嵌套                                                    width_ratios=[0.25, 2],  #左右宽度比                                                    wspace=0.0)  #间距        ax_bar = fig.add_subplot(inner_gs[0])  #添加左侧堆叠柱状图            bottom += frac  #更新堆叠的底部高度

第五部分

绘图函数:左侧堆叠柱状图的边框轴以及刻度参数设置
        ax_bar.set_ylim(0, 100)  #y轴范围        ax_bar.set_xlim(-0.5, 0.5)  #x轴范围        ax_bar.set_xticks([])  #隐藏x轴刻度        ax_bar.set_yticks([0, 25, 50, 75, 100])  #y轴刻度位置        ax_bar.set_yticklabels([0, 25, 50, 75, 100])  #y轴刻度标签        #y轴标题        if i == 0:            ax_bar.set_ylabel('Relative effect of estimates (%)',  #文本                              fontsize=18,  #大小                              weight='bold')  #加粗

第六部分

绘图函数:右侧森林图的初始化与背景色设置
        ax_point = fig.add_subplot(inner_gs[1])  #右侧森林图        base_color = colors[i % len(colors)]  #背景色        ax_point.axvline(0,  #x                         color='black',  #颜色                         linestyle='--',  #虚线                         linewidth=2.5,  #粗细                         zorder=0)  #层

第七部分

绘图函数:遍历绘制森林图散点、误差棒及显著性标记
        #遍历数据绘制森林图的各点        for y, var_info in zip(y_positions, res['vars_data']):            #显著性符号设置            if var_info['pval'] < 0.001:                sig = '***'            elif var_info['pval'] < 0.01:                sig = '**'            elif var_info['pval'] < 0.05:                sig = '*'            else:                sig = ''            display_name = var_info['name']#变量名            ax_point.text(0.75,  #x                          y,  #y                          f"{display_name}{sig}",  #文本                          verticalalignment='center',  #垂直                          fontsize=15)  #大小

第八部分

绘图函数:森林图坐标轴样式、文本标注及图例设置
        ax_point.set_yticks([])  #去掉y轴刻度        ax_point.set_ylim(len(res['vars']), -1)  #反转y轴自上而下排列        ax_point.set_xlim(-0.6, 1.5)  #x轴范围        ax_point.set_xticks([-0.4, 0.0, 0.4, 0.8, 1.2])  #x轴刻度值        #设置森林图刻度参数        ax_point.tick_params(axis='x',  #轴                             width=3.5,  #粗细                             length=6,  #长                             labelsize=14)  #大小    handles = [plt.Rectangle((0, 0), 1, 1, color=colors[k]) for k in range(4)]  #生成图例句柄

第九部分

执行部分:读取Excel数据,定义分组。通过遍历目标数据提取出每一个子图的数据,剥离森林图数据、柱状堆叠图数据 ,绘图等。
# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == "__main__":    df_excel = pd.read_excel(r"data.xlsx")  #读取数据    #定义分组            if group_name not in relative_effects:                relative_effects[group_name] = row['Relative_Effect']  #本组的相对效应值        #汇总数据        df_real[gas] = {            'r2': r2,            'vars': vars_list,  #            'vars_data': vars_data,            'relative_effects': relative_effects          }

如何应用到你自己的数据

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

df = pd.read_excel(r"data.xlsx") 

2.设置变量分组,执行部分:

VAR_GROUPS = {    'Edaphic conditions': ['ST', 'SM', 'MWD'],    'Substrate quality': ['r1635/2930', 'DOC'],    'Nutrient characteristics': ['AP', 'NO3_H', 'NH4_N', 'RDOC_DON_BC_N'],    'Microbial properties': ['F_B', 'G_G', 'MBC_MBN', 'Aer_Ana']}

3.提取数据要按照自己的实际数据来修改,执行部分:

for gas in df_excel['Gas'].unique():

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

plot_all = True  # 设置是否批量绘图

5.设置绘图结果的保存地址,执行部分:

plt.savefig(fr"cheme_{scheme_id}.pdf", bbox_inches='tight',facecolor='white')

推荐

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

获取方式

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

最新文章

随机文章