Подтвердить что ты не робот

Расположение размещения оси y и z в графике 3D matplotlib

По умолчанию, построение набора точек (или любого другого) в 3D с matplotlib, определяет ось z по вертикали, как показано здесь (код ниже):

введите описание изображения здесь

Мне нужно обменивать ось z и y, так что ось y показана вертикально.

Я огляделся, но не нашел способа сказать matplotlib для этого.

Добавить: Я не хочу прибегать к хакеру, где я меняю данные и метки. Это простой 3-х точечный 3D-график, но мне приходится строить гораздо более сложные поверхности. Я ищу общее решение, а не просто то, что работает с разбросами. Простой способ сказать matplotlib поместить ось y вертикально вместо оси z - это чистый способ сделать это.


MWE

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D


fig = plt.figure()
ax = Axes3D(fig)

ax.scatter([0.2, 0.5, 0.8], [2.3, 0.47, 1.], [2.1, 5.3, 0.7])

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
4b9b3361

Ответ 1

Одна из возможностей состоит в том, чтобы поменять положение y и z в данных и метках соответственно. вместо

ax.scatter([0.2, 0.5, 0.8], [2.3, 0.47, 1.], [2.1, 5.3, 0.7])

использовать

ax.scatter([0.2, 0.5, 0.8], [2.1, 5.3, 0.7], [2.3, 0.47, 1.])

и обозначить как ax.set_ylabel('z') и ax.set_zlabel('y')

Ответ 2

Я не думаю, что это возможно в настоящее время. ax.view_init() также должен принять третий угол. Я открыл проблему на github, https://github.com/matplotlib/matplotlib/issues/14453#issue-452397120, надеюсь, кто-то заинтересован в реализации этой функции.