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()
Теперь это построит график, который является горизонтальным в трехмерном пространстве. Как сделать график вертикальным, чтобы он оказался перед пользователем?
Что я хочу сделать, так это построить несколько таких вертикальных графов, которые отделены некоторым расстоянием и обращены к пользователю.
Ответы
Ответ 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)