Python: Как построить 3D-графики с помощью Python? - PullRequest
23 голосов
/ 19 февраля 2010

Я использую matplotlib для этого

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

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

x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')

plt.show()

Теперь строится график, горизонтальный в трехмерном пространстве. Как сделать график вертикальным, чтобы он смотрел на пользователя?

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

Ответы [ 4 ]

12 голосов
/ 19 февраля 2010

bp ответ может работать нормально, но есть гораздо более простой способ.

Ваш текущий график «плоский» по оси z, поэтому он горизонтальный. Вы хотите, чтобы он был вертикальным, что означает, что вы хотите, чтобы он был «плоским» по оси Y. Это включает в себя крошечную модификацию вашего кода:

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

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

x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]
# put 0s on the y-axis, and put the y axis on the z-axis
ax.plot(xs=x, ys=[0]*len(x), zs=y, zdir='z', label='ys=0, zdir=z')
plt.show()

Тогда вы можете легко создать несколько таких графиков, используя разные значения для параметра ys (например, вместо ys=[2]*len(x) график будет немного позади).

7 голосов
/ 08 сентября 2012

Вы можете установить угол обзора трехмерного графика с помощью функции view_init (). Пример ниже для версии 1.1 matplotlib.

from mpl_toolkits.mplot3d import axes3d
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')
ax.view_init(90, -90)
plt.show()
7 голосов
/ 28 октября 2010

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

3 голосов
/ 19 февраля 2010

Согласно документации вы хотите использовать метод ax.plot_surface(x,y,z). Больше информации и типов диаграмм здесь .

Должно работать следующее:

x = [1,2,3]
y = [4,5,6]
z = [7,8,9]
data = zip(x,y,z)

#map data on the plane
X, Y = numpy.meshgrid(arange(0, max(x), 1), arange(0, max(y), 1))
Z = numpy.zeros((len(Y), len(X)), 'Float32')
for x_,y_,z_ in data:
  Z[x_, y_] = z_ #this should work, but only because x and y are integers
                 #and arange was done with a step of 1, starting from 0
fig = p.figure()
ax = p3.Axes3D(fig)
ax.plot_surface(X, Y, Z)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...