当前位置:首页>python>Python绘制多y轴渐变色嵌套柱状图

Python绘制多y轴渐变色嵌套柱状图

  • 2026-10-11 05:34:28
Python绘制多y轴渐变色嵌套柱状图

代码绘制成果展示

此图为多Y轴渐变色嵌套柱状图及正态分布拟合曲线的综合统计图,主要用于对比不同分组的数据分布特征。图中的X轴代表数值;为了在同一画布中清晰展示不同样本量的数据该图设立了三个独立的频率Y轴。图中的柱状图代表了各组数据在特定数值区间内的真实频数分布;而其上的对应颜色虚线则是基于各组数据均值和标准差计算得出的正态分布概率密度曲线,直观地刻画了数据的集中趋势与离散范围。
结果图
多种配色

代码解释

第一部分

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

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#E74C3C', '#3B4A6B', '#1C8C85'],}

第三部分

绘图函数:数据准备与颜色分配
# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_residual_stacked_histogram(df_real, scheme_id):    selected_hex_colors = COLOR_SCHEMES[scheme_id]  # 获取配色方案    colors_list = selected_hex_colors[:len(sources)]  # 分配颜色

第四部分

绘图函数:创建画布及主Y轴初始化
    # 创建画布    fig, ax = plt.subplots(figsize=(8, 6))    # 绘制子图编号    ax.text(0.85,  # x            0.9,  # y            '(a)',  # 文本            transform=ax.transAxes,  # 坐标系            fontsize=30,  # 字号            fontweight='bold',  # 加粗            va='bottom',  # 垂直            ha='left')  # 水平    ax.tick_params(axis='y',  #轴                   colors=colors_list[0])  # 颜色同    ax.spines['left'].set_color(colors_list[0])  #左边框颜色

第五部分

绘图函数:创建多y轴
    axes = [ax]  #存放多Y轴        #设置刻度样式        ax_new.tick_params(axis='y',colors=colors_list[i])        ax_new.spines['right'].set_color(colors_list[i])  #边框组颜色        #刻度文本        for label in ax_new.get_yticklabels():            label.set_fontsize(11)        axes.append(ax_new)  #保存

第六部分

绘图函数:绘制渐变色直方图
    patches = []  #存放柱子    max_counts = []  #各组最大频数    # 遍历每一组数据及其对应y轴    for i, (res, current_ax) in enumerate(zip(res_list, axes)):        #绘制直方图        n, _, p = current_ax.hist(res,  #轴                                  bins=bins,  #分箱                                  stacked=False,  #堆叠                                  edgecolor='white',  #边色                                  linewidth=0,  #边框线宽                                  rwidth=0.95 - i * 0.20,  #宽度                                  alpha=1.0)  #透明度                im.set_clip_path(rect)  # 掩码                rect.set_facecolor('none')  # 清除原矩形底色                rect.set_edgecolor('white')  # 白色边框                rect.set_zorder(3)  # 边框图层

第七部分

绘图函数:绘制正态分布曲线
    x_pdf = np.linspace(-res_limit, res_limit, 200)  # 生成坐标用于绘制正态曲线    ax.set_xlim(-res_limit, res_limit)  # X轴范围        # 动态自适应设置每个Y轴的范围        max_pdf = max(y_pdf * scale_factor) if len(y_pdf) > 0 else 0        line_normals.append(plt.Line2D([0], [0],#占位                                       color=colors_list[i],#颜色                                       linestyle='--',#线性                                       lw=2.5,#粗细                                       label=rf'{sources[i]} fit ($\mu = {mu_i:.1f}$, $\sigma = {std_i:.1f}$)'))#文本

第八部分

绘图函数:绘制标题、图例、结果保存
    # x轴标题    ax.set_xlabel(r'Residual ($\mu\epsilon$)',  # 文本                  fontsize=14,  # 字体大小                  fontweight='bold')  # 加粗    # 添加图例    ax.legend(handles=legend_patches + line_normals,  # 句柄              loc='upper left',  # 位置              prop={'size': 9},  # 字体属性              edgecolor='gray',  # 边框颜色              framealpha=1)  # 背景透明度

第九部分

执行部分
# =========================================================================================# ======================================4.执行部分=======================================# =========================================================================================if __name__ == "__main__":    df_data = pd.read_excel(r'\data.xlsx')  # 读取数据    scheme_id = 1    print(f'正在绘制并保存方案:{scheme_id}')    plot_residual_stacked_histogram(df_data, scheme_id)

如何应用到你自己的数据

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

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

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

plot_all = True

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

plt.savefig(fr'Scheme_{scheme_id}.svg', bbox_inches='tight')

推荐

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

获取方式

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

最新文章

随机文章