如何在不使用鼠标的情况下对内联3D matplotlib图进行缩放?

5

这个问题 说明了如何通过指定仰角和方位角来更改matplotlib中3D图的“相机位置”。例如,ax.view_init(elev = 10,azim = 20)

是否有一种类似的方法可以以数字方式指定图形的缩放比例 - 即不使用鼠标?

我找到的唯一相关问题是这个, 但是其中被接受的答案需要安装另一个库,然后还需要使用鼠标进行缩放操作。

编辑:

只是为了明确,我不是在谈论更改图形大小(使用fig.set_size_inches()或类似方法)。图形大小很好;问题是绘制的内容只占据了图形的一小部分:

image

2个回答

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

注意:此行为实际上没有详细记录并可能会更改。在大多数情况下,更好的解决方案是更改轴的限制以仅绘制相关部分。您可以使用ax.autoscale(tight=True)来方便地完成此操作。

Working IPython/Jupyter example:

%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 = 10 时的图片

dist = 5

当 dist = 5 时的图片


0

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

ax.dist参数已被弃用。更好的方法是使用ax.set_box_aspect()函数中的“zoom”参数。

例如:

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

在调用图形画布管理器的 show() 函数之前,需要设置这个。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接