如何在Matplotlib中使用Axes3D缩放
我正在使用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 个回答
你也可以用鼠标的滚轮来放大或缩小。
我发现,在 matplotlib 3.3.4
版本中,你可以用鼠标的左键(而不是右键)来画一个矩形,这样就可以放大图像。完成放大后,你可以松开右键。之后,图像就会缩小。
至少在使用 matplotlib 时,情况是这样的:
matplotlib.use("Qt5Agg")
- 并且在导航工具栏中使用
matplotlib.backends.backend_qt5agg.NavigationToolbar2QT
。
与其使用缩放功能,不如你可以像下面这样控制坐标轴的范围:
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中是否有效,因为我没有这样的环境。
其实,@tcaswell说得对,这个功能是不存在的,所以它会返回false。你试过在绘图窗口上使用“缩放到矩形”按钮吗?那个功能很好用。如果你还没试过,可以参考一下matplotlib的说明,关于交互式导航。
你可以通过两种方式来放大:
点击平移/缩放按钮:
用右键点击并拖动鼠标到新的位置来放大。向右移动鼠标会放大x轴,向左移动则会缩小。
点击“缩放到矩形”按钮:
把鼠标放在坐标轴上,按下左键。然后在按住按钮的情况下拖动鼠标到新的位置,最后松开按钮。