如何绘制兼具3D视图与顶部2D投影的数据可视化图?
在Matplotlib中同时展示3D散点图与顶部2D投影
要实现3D视图+顶部2D投影的效果,你可以通过在同一个画布上创建3D轴和对齐的2D子轴来完成,以下是修改后的完整代码:
import numpy as np import matplotlib.pyplot as plt # 生成示例数据 x = np.linspace(30, 40, 100) y = np.linspace(70, 80, 100) z = np.linspace(100, 400, 100) fig = plt.figure(figsize=(10, 8)) # 创建3D主坐标轴 ax3d = fig.add_subplot(projection='3d') ax3d.scatter3D(x, y, z, color="green", alpha=0.6) ax3d.set_title("3D Scatter Plot with Top 2D Projection") ax3d.set_xlabel('X') ax3d.set_ylabel('Y') ax3d.set_zlabel('Z') # 获取3D轴的位置参数,用于对齐顶部2D子图 pos = ax3d.get_position() # 创建顶部2D子轴,位置与3D轴的x-y区域对齐,高度设为0.15 ax2d = fig.add_axes([pos.x0, pos.y1 + 0.01, pos.width, 0.15]) # 绘制x-y平面的投影散点 ax2d.scatter(x, y, color="green", alpha=0.6) ax2d.set_title("Top 2D Projection (X-Y Plane)") ax2d.set_xlabel('X') ax2d.set_ylabel('Y') # 调整2D轴的刻度,和3D轴保持一致 ax2d.set_xlim(ax3d.get_xlim()) ax2d.set_ylim(ax3d.get_ylim()) plt.show()
关键实现细节:
- 使用
fig.add_axes()创建与3D轴对齐的2D子图,通过ax3d.get_position()获取3D轴的位置坐标,确保2D子图精准放在3D轴的正上方 - 顶部2D投影本质是忽略Z轴数据,仅绘制X-Y平面的散点,同时保持刻度范围和3D轴一致,保证视觉统一
- 通过
alpha参数设置透明度,避免遮挡,提升整体可视化效果
内容的提问来源于stack exchange,提问作者Adnan
相关产品推荐
相关产品推荐

