Python 如何在Matplotlib中使用Axes3D进行缩放

Python 如何在Matplotlib中使用Axes3D进行缩放,python,numpy,matplotlib,zooming,Python,Numpy,Matplotlib,Zooming,我正在使用matplotlib生成三维绘图。我希望能够放大感兴趣的领域。目前,我可以平移,但不能缩放。通过查看mplot3d API,我了解了can\u pan(): 和可以缩放(): 它们都返回False(我认为can_pan返回False,因为轴不能同时平移和缩放,但可能我读错了API) 有没有办法启用缩放?API表示它不使用按钮。是否有办法启用缩放或将其设置为可以平移()和可以缩放()返回True 以下是代码片段: import numpy as np import matplotlib.

我正在使用matplotlib生成三维绘图。我希望能够放大感兴趣的领域。目前,我可以平移,但不能缩放。通过查看mplot3d API,我了解了
can\u pan():

可以缩放():

它们都返回False(我认为can_pan返回False,因为轴不能同时平移和缩放,但可能我读错了API)

有没有办法启用缩放?API表示它不使用按钮。是否有办法启用缩放或将其设置为
可以平移()
可以缩放()
返回
True

以下是代码片段:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

data = np.genfromtxt('data_file.txt')

fig1 = plt.figure()
ax1 = fig1.gca(projection='3d')
ax1.scatter(data[:,0],data[:,1],data[:,2], c='r', marker='.')
plt.show()

ax1.can_zoom()
>>> False

ax1.can_pan()
>>> False

我在Ubuntu 14.04 64位桌面版本机器上使用Python 2.7,并从默认存储库安装matplotlib(如果相关的话,我可以查找版本)。

实际上@tcaswell是正确的,该功能不存在,因此返回false。您是否尝试过在绘图窗口上缩放到矩形按钮?那很好用。如果尚未安装,请参阅上的matplotlib说明。 可以使用两种方式放大:

  • 单击“平移/缩放”按钮:

    按鼠标右键进行缩放,将其拖动到新位置。x轴将按向右移动的比例放大,并按向左移动的比例缩小

  • 单击“缩放到矩形”按钮:

    将鼠标放在轴和轴上的某个位置,然后按鼠标左键。按住按钮的同时拖动鼠标到新位置并释放


  • 您也可以拖动鼠标上的滚轮进行缩放。

    很抱歉这样做,但请实现它;)。之所以
    can_pan
    can_zoom
    返回true,是因为此功能当前不存在。@tcaswell,“实现它”是什么意思?我找不到设置以使
    can\u zoom()
    can\u pan()
    返回
    True
    。你是说要编写一个方法来实现这一点吗?我的意思是Axes3D类目前没有通过Rectage实现缩放或平移。如果您想在
    Axes3D
    中看到这些功能,请实现它们。您的评论让我尝试使用鼠标右键,它实际上放大了绘图的中心。这足够好了,谢谢。我以前尝试过使用“平移/缩放”按钮和“缩放到矩形”按钮,但这两个按钮都不会改变鼠标右键或左键的功能。左旋转三维打印,右放大中心。虽然它只在中心上缩放,但我可以找到一种方法,在数据周围绘制一个框,使其偏离中心,以移动打印中心。如果你想真正深入三维打印,并且不介意在程序中添加另一个依赖项,你可能想尝试mayavi而不是mpl。取决于您的应用程序,但它对3d渲染非常强大。
    Return True if this axes supports the zoom box button functionality.
    
    3D axes objects do not use the zoom box button.
    
    import numpy as np
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
    
    data = np.genfromtxt('data_file.txt')
    
    fig1 = plt.figure()
    ax1 = fig1.gca(projection='3d')
    ax1.scatter(data[:,0],data[:,1],data[:,2], c='r', marker='.')
    plt.show()
    
    ax1.can_zoom()
    >>> False
    
    ax1.can_pan()
    >>> False