缩放内联 3D matplotlib 图*无需*使用鼠标?

问题描述 投票:0回答:2

这个问题解释了如何通过指定仰角和方位角来更改 matplotlib 中 3D 图的“相机位置”。

ax.view_init(elev=10,azim=20)
,例如。

是否有类似的方法以数字方式指定图形的zoom——即不使用鼠标?

我能找到的唯一相关问题是这个,但公认的答案涉及安装另一个库,然后还需要使用鼠标进行缩放。

编辑:

需要说明的是,我不是在谈论改变图形大小(使用

fig.set_size_inches()
或类似的)。图形尺寸很好;问题是绘制的东西只占了图中的一小部分:

image

python matplotlib plot zooming matplotlib-3d
2个回答
8
投票

最接近

view_init
的解决方案是直接设置
ax.dist
。根据
get_proj
的文档,“dist 是眼睛观察点与物体点的距离”。 初始值目前使用 dist = 10
 硬编码
。较低的值(高于 0!)将导致绘图放大。

注意:此行为并未真正记录在案,可能会发生变化。在大多数情况下,更改轴的限制以仅绘制相关部分可能是更好的解决方案。你可以使用

ax.autoscale(tight=True)
方便地做到这一点。

工作的 IPython/Jupyter 示例:

%matplotlib inline
from IPython.display import display
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Grab some test data.
X, Y, Z = axes3d.get_test_data(0.05)

# Plot a basic wireframe.
ax.view_init(90, 0)
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
plt.close()

from ipywidgets import interact

@interact(dist=(1, 20, 1))
def update(dist=10):
    ax.dist = dist
    display(fig)

输出

dist = 10

dist = 5


0
投票

我知道这是一个老问题,但我想我会为任何正在寻找的人提供更新的答案。

ax.dist
论点已被弃用。执行此操作的首选方法是在
ax.set_box_aspect()
函数中使用“缩放”参数。

例如:

ax.set_box_aspect((1, 1, 1), zoom=2.0)

这个需要在调用figure canvas manager的

show()
函数之前设置

© www.soinside.com 2019 - 2024. All rights reserved.