如何在Matplotlib中使用Axes3D缩放

21 投票
4 回答
34739 浏览
提问于 2025-04-18 21:34

我正在使用matplotlib生成一个3D图。我想要能够放大一些感兴趣的区域。目前,我可以平移,但不能放大。查看mplot3d的API,我了解到有两个函数:can_pan():

Return True if this axes supports the pan/zoom button functionality.

3D axes objects do not use the pan/zoom button.

can_zoom():

Return True if this axes supports the zoom box button functionality.

3D axes objects do not use the zoom box button.

这两个函数都返回了False(我觉得can_pan返回False是因为坐标轴不能同时平移和放大,但也许我理解API有误)。

有没有办法启用放大功能?API显示它不使用按钮。有没有什么方法可以让can_pan()can_zoom()返回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

我在一台安装了matplotlib的Ubuntu 14.04 64位桌面版机器上使用Python 2.7(如果版本相关的话,我可以查一下版本)。

4 个回答

-1

你也可以用鼠标的滚轮来放大或缩小。

0

我发现,在 matplotlib 3.3.4 版本中,你可以用鼠标的左键(而不是右键)来画一个矩形,这样就可以放大图像。完成放大后,你可以松开右键。之后,图像就会缩小。

至少在使用 matplotlib 时,情况是这样的:

  • matplotlib.use("Qt5Agg")
  • 并且在导航工具栏中使用 matplotlib.backends.backend_qt5agg.NavigationToolbar2QT
2

与其使用缩放功能,不如你可以像下面这样控制坐标轴的范围:

RADIUS = 1.0  # Control this value.
ax1.set_xlim3d(-RADIUS / 2, RADIUS / 2)
ax1.set_zlim3d(-RADIUS / 2, RADIUS / 2)
ax1.set_ylim3d(-RADIUS / 2, RADIUS / 2)

如果你把RADIUS这个变量设得小一点,你就能更近距离地看到你的数据。在这个例子中,你可以从原点放大或缩小视图。你也可以选择其他的焦点,不过你需要计算出合适的范围才能达到想要的效果。希望这对你有帮助。

我不确定这在python2中是否有效,因为我没有这样的环境。

21

其实,@tcaswell说得对,这个功能是不存在的,所以它会返回false。你试过在绘图窗口上使用“缩放到矩形”按钮吗?那个功能很好用。如果你还没试过,可以参考一下matplotlib的说明,关于交互式导航

你可以通过两种方式来放大:

  1. 点击平移/缩放按钮:

    用右键点击并拖动鼠标到新的位置来放大。向右移动鼠标会放大x轴,向左移动则会缩小。

  2. 点击“缩放到矩形”按钮:

    把鼠标放在坐标轴上,按下左键。然后在按住按钮的情况下拖动鼠标到新的位置,最后松开按钮。

撰写回答