
代码绘制成果展示














代码解释


第一部分

# =========================================================================================# ====================================== 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, #xcolor='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, #xy, #yf"{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)] #生成图例句柄

第九部分

# =========================================================================================# ======================================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')
推荐


获取方式
