Matlab 如何在Matplotlib的3D曲面图中获得垂直Z轴?

Matlab 如何在Matplotlib的3D曲面图中获得垂直Z轴?,matlab,matplotlib,plot,matlab-figure,Matlab,Matplotlib,Plot,Matlab Figure,我正在使用Matplotlib将一些数据绘制为三维曲面图。我使用的代码与此非常相似。它生成如下所示的绘图: 此绘图的问题在于Z轴不垂直。如何使Z轴垂直 我检查了可用的不同API并发现。通过使用view_init设置绘图的低标高(elev=1),我可以使Z轴垂直,如下所示: 但是,这里的问题是,在低标高处,Y轴刻度标签都被覆盖,无法正确查看。所以我需要在一个高的高度上绘制,并且具有如图1所示的X-Y平面旋转角度。如何实现此绘图的垂直Z轴 我不知道Matlab,但我知道Matplotlib是从M

我正在使用Matplotlib将一些数据绘制为三维曲面图。我使用的代码与此非常相似。它生成如下所示的绘图:

此绘图的问题在于Z轴不垂直。如何使Z轴垂直

我检查了可用的不同API并发现。通过使用
view_init
设置绘图的低标高(
elev=1
),我可以使Z轴垂直,如下所示:

但是,这里的问题是,在低标高处,Y轴刻度标签都被覆盖,无法正确查看。所以我需要在一个高的高度上绘制,并且具有如图1所示的X-Y平面旋转角度。如何实现此绘图的垂直Z轴

我不知道Matlab,但我知道Matplotlib是从MatlabAPI派生的。因此,我查看了Matlab文档中的曲面图示例,发现它们的示例中Z轴似乎是垂直的。下图显示了一个高海拔的图示:

更新1:根据Bentoy13的建议,我设置了
view\u init(elev=30,azim=-37.5)
,得到了以下结果。它更好,但还不是垂直的:


相比之下,Matlab绘图中的Z轴完全垂直。另外,从这个角度可以看出,我实际上不能使用这个
azim=-37.5
,因为有些信息是隐藏的。还有其他解决方案吗?:-)

在Matlab文档中给出的示例中,曲面图通常在命令
view
给出的特殊位置查看:

view(3)
该命令设置轴的视点。根据文档,
视图(3)
设置默认的三维视图,方位角=–37.5,仰角=30

编辑

具有垂直z轴的问题不是轴是垂直的,而是透视的问题。默认情况下,Matlab使用正交投影绘制3D曲面,但matplotlib似乎使用透视投影绘制。遗憾的是matplotlib没有提供用于设置此项的API

编辑2

似乎以下面片对于在正交投影中绘制3D非常有用:

import numpy
from mpl_toolkits.mplot3d import proj3d
def orthogonal_proj(zfront, zback):
    a = (zfront+zback)/(zfront-zback)
    b = -2*(zfront*zback)/(zfront-zback)
    return numpy.array([[1,0,0,0],
                        [0,1,0,0],
                        [0,0,a,b],
                        [0,0,0,zback]])
proj3d.persp_transformation = orthogonal_proj
我不相信这个补丁,你可以找到它。

在MPL 2.1.0中,他们添加了手动覆盖投影的选项,以生成具有正交投影的3d图形;只需在脚本中插入以下行:

ax.set_proj_type('ortho')
[来自MPL源的示例]


谢谢!我尝试了这些设置,Z轴更好,几乎是垂直的。我用新的图形更新了这个问题。有没有办法让它完全垂直,就像在Matlab图形中一样?此外,我不能将此azim用于此数据:-)@Ashwin请参阅我的编辑。我找到了一段代码,可以转换为正交投影,但我不熟悉matplotlib,所以我不知道一旦绘制曲面图,如何使用它。Bentoy13:这很有效!你能把那个代码片段作为答案重新发布,这样我就可以接受它了吗?:-)从版本2.1开始,该功能已实现:它看起来像透视投影/ORTOGRAPEC投影问题