
代码绘制成果展示














代码解释


第一部分

# =========================================================================================# ====================================== 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 = 1print('正在绘制并保存方案:', scheme_id)plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
df_real = pd.read_excel(r'data.xlsx') #原始数据2.设置是否要进行批量绘图,执行部分:
plot_all = False3.设置绘图结果的保存地址,执行部分:
plt.savefig(fr'3D_plot_scheme_{scheme_id}.pdf', bbox_inches='tight',pad_inches=0.1)
推荐


获取方式
