当前位置:首页>python>期刊图片复现|Python绘制3D填充面积图

期刊图片复现|Python绘制3D填充面积图

  • 2026-10-11 06:30:58
期刊图片复现|Python绘制3D填充面积图

代码绘制成果展示

论文:Physics‐AI Synergized Optimization‐Learning‐Simulation Framework for Robust Cascade Reservoir Scheduling Under Future Hydrological Uncertainty
论文原图
这幅3D填充面积图详细展示了在六种情景下,模型所预测的WDD水库在一年内的水位动态演变过程 。图中的X轴代表月份;Y轴代表情景维度;Z轴则代表模型预测的水库水位高度。图中不同颜色的三维波浪形曲面及其下方的半透明填充区域,分别具体描绘了这六种不同水文情景下的逐月水位变化轨迹。
仿图
多种配色

代码解释

第一部分

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

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#FFB3E6', '#FFB366', '#FFFF99', '#99CC99', '#6699FF', '#B399FF'],}

第三部分

绘图函数:画布与坐标轴比例设置
# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(df, scheme_id):    #创建画布    fig = plt.figure(figsize=(13, 8))    ax = fig.add_subplot(111, projection='3d')  #添加子图    ax.zaxis.set_tick_params(width=2, length=5)  #设置Z轴刻度线

第四部分

绘图函数:数据提取与极值计算
    months = df.iloc[:, 0].values  #提取x轴时间数据    x_min, x_max = months.min(), months.max()  #计算极值    num_scenarios = df.shape[1] - 1  #y轴分类数    scenarios = np.arange(1, num_scenarios + 1)  #y轴刻度坐标    z_min = np.floor(data_min / step) * step  #Z轴最小值向下取整至步长的整数倍    z_max = np.ceil(data_max / step) * step  #Z轴最大值向上取整至步长的整数倍

第五部分

绘图函数:颜色配置与多边形构建
    color_scheme = COLOR_SCHEMES[scheme_id]  #提取配色方案    selected_hex_colors = [color_scheme[i % len(color_scheme)] for i in range(num_scenarios)]  #提取对应颜色    edge_colors = [darken_color(c) for c in selected_hex_colors]  #边缘色    #面    poly = PolyCollection(verts,  #多边形顶点                          facecolors=selected_hex_colors,  #填充颜色                          alpha=0.7)  #透明度    #添加到子图    ax.add_collection3d(poly,  #多边形面                        zs=scenarios,  #位置                        zdir='y')  #沿着Y轴方向排列

第六部分

绘图函数:配置坐标轴范围、刻度与标签设置
    y_min, y_max = scenarios.min() - 0.5, scenarios.max() + 0.5  #y轴范围    ax.set_xlim(x_min, x_max)  #x轴范围    #x轴标题    ax.set_xlabel('Month',  #文本                  fontsize=14,  #字体大小                  labelpad=15)  #间隔    #y轴标题    ax.set_ylabel('Scenario',  #文本                  fontsize=14,  #字体大小                  labelpad=15)  #间隔    # y轴标题    ax.set_zlabel('Water level (m)',  #文本                  fontsize=14,  #字体大小                  labelpad=2)  #间隔    ax.zaxis._axinfo['juggled'] = (1, 2, 0)  #调整z轴刻度位置

第七部分

绘图函数:设置背景墙与网格线
    #边框线设置    ax.xaxis.line.set_color("none")    ax.yaxis.line.set_color("none")    ax.zaxis.line.set_color("none")    ax.yaxis._axinfo["grid"].update({"linewidth": 1, "linestyle": "--", "color": "gray", "alpha": 0.6})    ax.zaxis._axinfo["grid"].update({"linewidth": 1, "linestyle": "--", "color": "gray", "alpha": 0.6})

第八部分

绘图函数:手动绘制边框线
    #设置边框线    #样式    box_kwargs = {'color': 'black',  #颜色                  'linewidth': 2.5,  #粗细                  'zorder': 10}  #层    #绘制边框    ax.plot([x_min, x_max],  #横坐标            [y_min, y_min],  #纵坐标            [z_min, z_min],  #高度坐标            **box_kwargs)  #样式    ax.plot([x_min, x_min], [y_max, y_max], [z_min, z_max], **box_kwargs)    ax.plot([x_max, x_max], [y_max, y_max], [z_min, z_max], **box_kwargs)

第九部分

执行部分
# =========================================================================================# ======================================5.执行部分=======================================# =========================================================================================if __name__ == '__main__':    df_real = pd.read_excel(r'data.xlsx')  #原始数据        scheme_id = 1        print('正在绘制并保存方案:', scheme_id)        plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

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

df_real = pd.read_excel(r'data.xlsx')  #原始数据

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

plot_all = False

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

plt.savefig(fr'3D_plot_scheme_{scheme_id}.pdf', bbox_inches='tight',pad_inches=0.1)

推荐

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

获取方式

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

最新文章

随机文章