如何使用Matplotlib避免3D图中的失真

时间:2017-07-17 20:40:35

标签: python matplotlib graph-visualization

我知道matplotlib不是3D可视化的最佳选择,但我已经尝试过让其他软件包如Mayavi工作(我的openGL版本阻止了它)。 我的问题是,当我创建3D绘图并旋转它时,根据我旋转绘图的历史记录,绘图可能会变形。 当我从初始位置旋转到情节的顶视图时,我得到了我期望的结果。但是,当我从侧视图旋转到顶视图时(您可以将ax.view_init(45,-90,)更改为ax.view_init(45,0,)从“侧视图”开始),图像会显着扭曲。

Here是我描述的四种观点。图一是'前视图'。图2是从“前视图”旋转后的“俯视图”。图3是“侧视图”。图4是从“侧视图”旋转后的“俯视图”。

我用于创建绘图的代码(尽管不是实际曲面)如下所示。我正在使用matplotlib 2.0.0。我希望这就是所有需要的。我预计这可能无法解决,但我会感激任何意见。感谢。

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.view_init(45,-90,)
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
plt.xlim(0,pL)
plt.ylim(0,pW)
ax.set_aspect("equal")
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
ax.grid(False)

plt.show()

编辑: 这样我的情节可以重复: 我使用

绘制
ax.plot_trisurf(x,y,z, linewidth=0.2, antialiased=True)
x=[-2.8284271247461898,0,2.8284271247461907,5.6568542494923806,-2.8284271247461898,0,8.4852813742385713,11.313708498984761,3.3137084989847598,6.1421356237309492,14.142135623730953,16.970562748477143,8.9705627484771409,11.798989873223331,19.798989873223331,22.627416997969522,14.627416997969521,17.45584412271571,25.45584412271571,28.284271247461902,20.284271247461902,23.112698372208094,24,26.828427124746192]
y=[2.8284271247461894,5.6568542494923797,-2.8284271247461903,0,8.4852813742385695,11.313708498984759,-2.8284271247461898,0,8,10.82842712474619,-2.8284271247461898,0,8,10.82842712474619,-2.8284271247461898,0,8,10.82842712474619,-2.8284271247461898,0,8,10.82842712474619,4.284271247461902,7.1126983722080919]
z=[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

1 个答案:

答案 0 :(得分:0)

v3.3 起,matplotlib 的 Axes3d 不再扭曲 3D 绘图以匹配 2D 纵横比:

<块引用>

之前使用 Axes3D 绘制的图被拉伸以适合方形边界框。由于这种拉伸是在从 3D 投影到 2D 之后进行的,因此如果使用非方形边界框,则会导致图像失真。从 3.3 开始,这种情况不再发生。