
代码绘制成果展示





代码解释

第一部分

# =========================================================================================# ====================================== 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 = 1print('正在绘制并保存方案:', 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']] # 提取Xy = g_data['LST'] # 提取Y
3.设置是否要进行批量绘图,执行部分:
plot_all = True4.设置绘图结果的保存地址,绘图函数部分:
plt.savefig(fr'scheme_{scheme_id}.png', dpi=300,bbox_inches='tight')
往期内容
