首页 文章

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

提问于
浏览
2

我正在使用Matplotlib将一些数据绘制为3D表面图 . 我使用的代码非常类似于3D surface plot example . 它生成如下所示的图:

enter image description here

该图的问题在于Z轴不是垂直的 . 如何使Z轴垂直?

我检查了可用的不同API,找到了view_init . 通过使用 view_init 设置绘图的低仰角( elev=1 ),我可以使Z轴垂直,如下所示:

enter image description here

但是,这里的问题是在低海拔时,Y轴刻度标签都被覆盖,无法正确查看 . 所以我需要绘图处于高海拔并且X-Y平面旋转角度如图1所示 . 如何为此绘图实现垂直Z轴?

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

enter image description here

Update 1: 根据Bentoy13的建议,我设置 view_init(elev=30, azim=-37.5) 并获得以下结果 . 它更好,但还不垂直:

enter image description here

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

1 回答

  • 2

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

    view(3)
    

    命令view设置轴的视点 . 根据文档, view(3) 设置默认的三维视图,方位角= -37.5,高程= 30 .

    EDIT

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

    EDIT 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
    

    我不赞成这个补丁,你可以找到here .

相关问题