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

Python: Как построить графические диаграммы с помощью Python?

Я использую 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()

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

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

4b9b3361

Ответ 1

Ответ на

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) вместо этого немного поместит график).

Ответ 2

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

Ответ 3

Вы можете установить угол обзора 3D-графика с помощью функции 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()

Ответ 4

В соответствии с документацией вы хотите использовать метод 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)