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

yhqotfr8  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(112)

This question解释了如何通过指定仰角和方位角来更改matplotlib中3D绘图的“相机位置”。例如ax.view_init(elev=10,azim=20)

*是否有类似的方法来指定数字的 * 缩放 - i。e.不使用鼠标?

我能找到的唯一相关问题是this one,但接受的答案涉及安装另一个库,然后也需要使用鼠标缩放。

编辑:

需要说明的是,我并不是在谈论更改图形大小(使用fig.set_size_inches()或类似的方法)。身材尺寸精细;问题是,绘制的内容只占图的一小部分:

dnph8jn4

dnph8jn41#

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

lztngnrs

lztngnrs2#

我知道这是一个老问题,但我想我会为任何人提供一个更新的答案。
不推荐使用ax.dist参数。最好的方法是在ax.set_box_aspect()函数中使用'zoom'参数。
例如:

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

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

相关问题