Вращение оси Z в 3D-рисунке Matplotlib
Как повернуть ось z фигуры matplotlib, чтобы она отображалась как горизонтальная ось? Я создал следующую 3d фигуру:
Я пытался настроить значения в
ax.view_init(), но независимо от того, какие значения я использовал, я не могу перевернуть ось z, чтобы ориентация трех осей выглядела так, как показано на следующем рисунке:
Я думал об изменении трех компонентов всех данных так, чтобы я использовал ось x для построения z-компонента данных, но тогда это будет очень неудобно для многих моих расчетов, и что более важно, я не знать, как использовать ax.set_aspect для сохранения всей фигуры в одном и том же масштабе в прямоугольной рамке (прямоугольной, поскольку (оригинальный) z-компонент данных обычно охватывает больший диапазон, чем компоненты x и y).
Так как мне повернуть ось Z (на 90 градусов)?
РЕДАКТИРОВАТЬ:
Просто чтобы уточнить мой вопрос. Используя пример, использованный в ответе, у меня есть следующий код, который может сгенерировать фигуру с одинаковым масштабом по всем трем осям, и даже если я изменю размер всплывающего окна, фигура по-прежнему будет иметь одинаковое соотношение сторон для трех Оси и выглядят одинаково. Это то, что я хочу, но с осью z, повернутой на 90 градусов, чтобы она выглядела горизонтальной (желаемая система координат выглядит так, как показано на рисунке выше EM-волны). Если я переключаю порядок построения трех осей, я получаю горизонтальную ось Z (которая изображается как ось X), но затем я не могу использовать ax.set_aspect для изменения масштаба.
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
ax.set_xlim(-30,30)
ax.set_ylim(-30,30)
ax.set_zlim(-90,90)
ax.set_aspect(3, 'box-forced')
plt.show()
1 ответ
Вы можете просто изменить порядок значений X,Y,Z, которые вы передаете в свою функцию построения?
Используя этот пример:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
plt.show()
Изменение порядка ввода:
ax.plot_wireframe (X, Z, Y, rstride = 10, cstride = 10)