Увеличить встроенный 3D matplotlib рисунок *без * с помощью мыши?


Этот вопрос объясняет, как изменить "положение камеры" 3D-графика в matplotlib, указав углы возвышения и азимута. ax.view_init(elev=10,azim=20), например.

Существует ли аналогичный способ указать масштаб фигуры численно - то есть без использования мыши?

Единственный релевантный вопрос, который я смог найти, - это Этот , но принятый ответ на него включает установку другой библиотеки, которая затем также требует использования мыши, чтобы зум.

Редактировать:

Просто для ясности, я не говорю об изменении размера фигуры (используя fig.set_size_inches() или аналогичный). Размер рисунка в порядке; проблема в том, что нанесенный материал занимает только небольшую часть рисунка:

изображение

1 2

1 ответ:

Самое близкое решение к 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 = 10

dist = 5

изображения для Р = 5