当前位置:首页>python>Python绘制带误差线的多面板柱状图

Python绘制带误差线的多面板柱状图

  • 2026-10-11 07:44:23
Python绘制带误差线的多面板柱状图

代码绘制成果展示

成果图
此图为一个由15个子图组成的柱状图矩阵,用于对比MLR、RF和LightGBM集成三种预测模型在多个区域内的R2性能表现。子图按字母依次编号,一个子图代表一个区域。纵轴代表R2,横轴代表城市名称,不同颜色的柱子代表不同的模型。柱子的高度及其上方的数值代表了三种预测模型在各个区域上的R2平均表现,柱子越高且越接近1说明该模型的预测准确度与数据拟合效果越好;而柱子顶部误差棒则代表模型性能的标准差或不确定性波动范围(通常由交叉验证计算得出),误差棒越短意味着模型在不同数据子集上的表现越稳定、可靠性越高,反之误差棒越长则说明模型的预测结果存在较大的波动性和不确定性。
多种配色

代码解释

第一部分

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

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: {'c1_fill': '#339DB5', 'c1_edge': '#267B8E', 'c2_fill': '#C9342B', 'c2_edge': '#9C2821', 'c3_fill': '#EBA11F', 'c3_edge': '#BB8119'},}

第三部分

绘图函数:绘图数据的提取
# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_grouped_barchart(df, scheme_id=1):    base_val = df.iloc[:, 1]    base_err = df.iloc[:, 2]    aug_val = df.iloc[:, 3]    aug_err = df.iloc[:, 4]    boot_val = df.iloc[:, 5]    boot_err = df.iloc[:, 6]

第四部分

绘图函数:画布与坐标系创建
    num_plots = len(regions) #子图数    cols = 5 #组图列    rows = math.ceil(num_plots / cols) #行    #创建画布    fig, axes = plt.subplots(rows, #行    cols, #列    figsize=(cols * 3.5, rows * 3.5)) #尺寸

第五部分

绘图函数:柱子样式、颜色与坐标的设置
    bar_width = 0.15 #柱子宽    intra_group_gap = 0.19 #柱子之间中心间距    pos2 = 0 #中间主子x坐标    pos1 = - (bar_width + intra_group_gap) #左柱子x    pos3 = + (bar_width + intra_group_gap) #右柱子x    legend_bars = [] #用于收集用于生成图例的柱子绘图对象

第六部分

绘图函数:循环绘制各个子图
     #遍历绘图    for i in range():        ax.grid(axis='y', #y                color='gray', #颜色                linestyle='--', #样式                linewidth=0.8, #线宽                alpha=0.3, #透明度                zorder=0) #层        #第一根柱子        b1 = ax.bar(pos1, #x                    base_val.iloc[i], #高度                    bar_width, #宽度                    yerr=base_err.iloc[i], #误差棒                    capsize=4, #误差棒两端横线                    color=mcolors.to_rgba(c1_fill, # 填充颜色                    alpha=1), #透明度

第七部分

绘图函数:设置x、y轴范围、标题、刻度标注
        #此子图最高y坐标        local_max = max(base_val.iloc[i] + base_err.iloc[i],                        aug_val.iloc[i] + aug_err.iloc[i],                        boot_val.iloc[i] + boot_err.iloc[i])        offset = local_max * 0.1 #设置偏移量,顶部留下一些空白        #y轴标题        ax.set_ylabel(r'$R^2$', #文本                      fontsize=16, #字体大小                      fontweight='bold', #加粗                      labelpad=5) #间距

第八部分

绘图函数:设置布局、添加图例,保存绘图结果
    #调整布局    plt.tight_layout(rect=[0, 0.08, 1, 1])    #图例    fig.legend(legend_bars, #句柄               model_names, #文本               fontsize=22, #字体大小               loc='lower center', #位置               bbox_to_anchor=(0.5, 0.02), #坐标               ncol=3, #列               frameon=False) #去掉边框

第九部分

绘图函数:执行部分
# =========================================================================================# ======================================4.主程序执行=======================================# =========================================================================================if __name__ == '__main__':    excel_file_path = r'data.xlsx' #原始数据    df = pd.read_excel(excel_file_path) #读取    #设置是否批量绘图    plot_all = True    if plot_all:        for scheme_id in COLOR_SCHEMES.keys():            plot_grouped_barchart(df, scheme_id=scheme_id)            print('正在绘制并保存方案:', scheme_id)    else:        scheme_id = 22        plot_grouped_barchart(df, scheme_id=scheme_id)        print('正在绘制并保存方案:', scheme_id)

如何应用到你自己的数据

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

excel_file_path = r'data.xlsx'  #原始数据

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

plot_all = True

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元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章