2016-01-24 6 views
0

Как повернуть ось z фигуры matplotlib так, чтобы она отображалась как горизонтальная ось? Я создал следующий 3d рисунок: enter image description hereВращение оси z в matplotlib 3d figure

Я попытался корректировки значений в

ax.view_init() , но независимо от того, какие ценности я, я не могу перевернуть ось г так что ориентация трех осей появляются как как те, в следующем рисунке: enter image description here

я подумал об изменении всех трех компонентов всех данных, так что я использую ось х, чтобы построить Z-составляющую данных, но тогда это будет очень неудобно для многих моих вычислений, и что более важно, я не знаю, как использовать ax.set_aspect, чтобы сохранить всю фигуру в том же масштабе в прямоугольном прямоугольнике (прямоугольное, потому что (исходный) z- компонент данных обычно охватывает больший диапазон, чем компоненты x и y).

Итак, как мне повернуть ось z (на 90 градусов)?

EDIT:

Просто чтобы прояснить мой вопрос. Используя пример, используемый в ответе, у меня есть следующий код, который может генерировать фигуру с одинаковой шкалой во всех трех осях, и даже если я изменил размер окна всплывающего окна, этот показатель все еще имеет одинаковое соотношение сторон для трех оси и выглядят одинаково. Это то, что я хочу, но с осью 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, которые вы передадите в функцию построения графика?

Использование this example:

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() 

enter image description here

Изменение порядка ввода:

ax.plot_wireframe (X, Z, Y, rstride = 10, cstride = 10)

enter image description here

+0

Работает. проблема в том, что я хочу сохранить масштаб моей фигуры одинаково во всех трех осях. Например, на рисунке, который я прикрепил, данные охватывают больший диапазон в направлении z в 2,5 раза, поэтому я просто использую ax.set_aspect и устанавливаю 2,5 в качестве отношения. Если изменить порядок ввода на ax.plot (z, x, y), то как сохранить масштаб неизменным (что означает, что теперь ось x должна быть длиннее) – Physicist

+0

@Физист http://stackoverflow.com/a/12371373/1461850 – atomh33ls

+0

Я пробовал ax.auto_scale_xyz, но при этом он не фиксирует соотношение сторон, поэтому я могу изменить масштаб фигуры, просто изменив размер всплывающего окна. Если я использую set_aspect, тогда я просто фиксирую отношение оси z и плоскости x-y. Это работает, если я не переключаю порядок сюжета, но как только я переключу порядок сюжета, как вы предложили, он не меняет соотношение, которое я хочу. Теперь мне нужно, чтобы ось x появилась на 2.5x больше, чем y и ось z, и сохраняйте соотношение сторон всей фигуры неизменным все время. – Physicist

 Смежные вопросы

  • Нет связанных вопросов^_^