如何使ax.view_init生成的类2D3D图具备2D图的窗口缩放拉伸特性?
解决3D转类2D图窗口拉伸问题
问题核心是Matplotlib的3D轴默认会强制保持数据的等比例缩放,而2D轴默认会随窗口大小自动拉伸适配。要让3D俯视图和2D图有相同的窗口拉伸行为,需要修改3D轴的几个关键设置:
修改步骤
- 给3D轴设置正交投影(消除透视,更贴近2D效果):
ax.set_proj_type('ortho') - 关闭3D轴的固定比例限制:
ax.set_box_aspect(None) - 隐藏Z轴的刻度、标签和边框(俯视图不需要显示Z轴元素)
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt # Sample data X = np.random.rand(10) Y = np.random.rand(10) Z = np.random.rand(10) RSSI = np.random.rand(10) # Normalize coordinates X_norm = X / np.max(X) Y_norm = Y / np.max(Y) Z_norm = Z / np.max(Z) # Plot figure 1 (修改后的3D转类2D图) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(X, Y, Z, c=RSSI, s=400, marker='s', cmap='viridis') # 设置俯视图视角 ax.view_init(90, -90) # 关键设置:正交投影+取消固定比例 ax.set_proj_type('ortho') ax.set_box_aspect(None) # 隐藏Z轴相关元素 ax.set_zticks([]) ax.set_zticklabels([]) ax.zaxis.line.set_visible(False) ax.zaxis.set_tick_params(labelleft=False) # Plot figure 2 (原2D图) fig, ax = plt.subplots(1, 1) t = X_norm plt.scatter(X, Y_norm, c=t, s=400, marker='s', cmap='viridis') plt.colorbar() plt.show()
说明
修改后调整窗口大小,第一个3D转的类2D图会和第二个纯2D图一样,随窗口拉伸或压缩,同时保持正交投影的无透视效果,视觉上和纯2D图一致。
内容的提问来源于stack exchange,提问作者fpga
相关产品推荐
相关产品推荐

