
代码绘制成果展示













代码解释


第一部分

# =========================================================================================# ====================================== 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)] # 分配颜色

第四部分

# 创建画布fig, ax = plt.subplots(figsize=(8, 6))# 绘制子图编号ax.text(0.85, # x0.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]) #左边框颜色

第五部分

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 0line_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 = 1print(f'正在绘制并保存方案:{scheme_id}')plot_residual_stacked_histogram(df_data, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
df_data = pd.read_excel(r'data.xlsx') # 读取数据2.设置是否批量绘图,执行部分:
plot_all = True3.设置绘图结果的保存地址,绘图函数部分:
plt.savefig(fr'Scheme_{scheme_id}.svg', bbox_inches='tight')
推荐


获取方式
