Python中沿y轴堆叠2D等高线图的空图问题求解
沿Y轴堆叠2D等高线图的修正方案
问题核心原因
当将zdir设为'y'后绘图空白,本质是contourf的坐标轴参数对应关系错误:
- 沿Z轴堆叠时,等高线平面是X-Y平面(垂直于Z轴),因此传入
x, y网格与对应数据,搭配zdir='z', offset=s(s为Z轴固定位置) - 沿Y轴堆叠时,等高线平面切换为X-Z平面(垂直于Y轴),必须传入X和Z维度的网格数据,而非原有的X-Y网格,同时
offset=s对应Y轴的固定位置。
修正后的完整代码
# 沿Y轴堆叠2D等高线图 import matplotlib.pyplot as plt import numpy as np # 生成X-Z平面的网格(x、x3需提前定义为一维数组) x_mesh, z_mesh = np.meshgrid(x, x3) fig = plt.figure(figsize=(8, 6)) ax = fig.add_subplot(111, projection='3d') contours3D = [] for i, s in enumerate(x3): # 固定Y轴为s,计算X-Z平面上的数值分布 fe_data = FE_ethylene(x_mesh, s, z_mesh) # 绘制X-Z平面的等高线,绑定到Y=s的位置 contours3D.append(ax.contourf(x_mesh, z_mesh, fe_data, zdir='y', offset=s, levels=levels, cmap='rainbow', alpha=1.0-i/10)) # 调整坐标轴范围:Y轴对应x3的取值区间 ax.set_xlim3d(0.45, 2.45) ax.set_ylim3d(min(x3), max(x3)) ax.set_zlim3d(0.07, 0.13) # 设置刻度:Y轴刻度匹配x3的分布 ax.set_xticks(np.linspace(0.6, 2.4, 5)) ax.set_yticks(np.linspace(min(x3), max(x3), 5)) ax.set_zticks(np.linspace(0.08, 0.12, 5)) # 修改坐标轴标签,对应新的轴映射 ax.set_xlabel("Carbon content (mg/cm2)") ax.set_ylabel("Sustainion content (mg/cm2)") ax.set_zlabel("PTFE content (mg/cm2)") plt.show()
关键调整点
- 生成
x_mesh和z_mesh:替换原有的X-Y网格,确保等高线绘制在正确的X-Z平面上 - 调整
FE_ethylene参数:传入x_mesh、固定Y值s、z_mesh,保证输出数据与网格形状一致 - 坐标轴适配:将Y轴的范围、刻度切换为
x3的取值,标签对应调整为堆叠维度的物理意义
内容的提问来源于stack exchange,提问作者Daniel Curulla Ferre
相关产品推荐
相关产品推荐

