Как сделать 3D-график с равным соотношением сторон, регулируемым даталимом? - PullRequest
0 голосов
/ 26 сентября 2019

Я строю набор объектов Line3d в моем axes3D.Я хочу, чтобы все оси были в одинаковом масштабе и исключены поля между осями и рисунком.И это должно выполняться для любой формы фигуры.

До сих пор я пробовал это:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_proj_type('ortho')
ax.set_aspect('equal', adjustable='datalim', anchor='C')
plt.subplots_adjust(left=0, bottom=0, right=1, top=1, wspace=0, hspace=0)
ax.set_axis_on()

ax.plot3D([0,0], [0,0], [0,1], 'blue', marker='s', markersize=5)
ax.plot3D([0,1], [0,0], [1,1], 'blue', marker='s', markersize=5)
ax.plot3D([1,1], [0,1], [1,1], 'blue', marker='s', markersize=5)

plt.show()

Это дает следующий рисунок, который явно не поддерживает масштаб в каждой оси:enter image description here

Я также попытался изменить:

ax.set_aspect('equal', adjustable='box', anchor='C')

Это дает следующий рисунок, который сохраняет ось с равным масштабированием: enter image description here

Но это не то, что я хочу, поскольку оси не покрывают всю рамку рисунка, что можно увидеть, когда я увеличу оси: enter image description here

В общем, я хочу что-то похожее на первую фигуру, но с изменением пределов оси, чтобы сохранить соотношение сторон оси, даже при увеличении и уменьшении.

Я пробовал другие альтернативы, такие как axis('scaled'), но безуспешно.Я знаю, что для двухмерной печати это работает просто установкой ax.set_aspect('equal') (см. Ссылку здесь ), но, похоже, это не относится к трехмерным осям.

...