Python:如何使用Python绘制3D图形?

24

我正在使用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()

现在这个代码构建了一个在三维空间中水平的图形。我该如何使这个图像垂直,以便它面向用户呢?

我想做的是构建多个这样的垂直图形,它们之间有一定的距离,并面向用户。


想一想,用3D图形来绘制2D数据是不是有点傻呢? - badp
2
我正在改变一个特定的参数alpha(不是x和y),并观察alpha的不同取值对图形的影响。 - Bruce
4个回答

12

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
你可以使用view_init()函数来设置3D图的视角。下面的示例适用于matplotlib 1.1版本。
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

Mayavi,特别是mlab模块,提供了强大的3D绘图功能,可处理大型或复杂数据,并且应该可以轻松地在numpy数组上使用。


3
根据文档,您想使用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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接