Python:如何使用Python绘制三维图?

24 投票
3 回答
51037 浏览
提问于 2025-04-15 19:28

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

现在这个代码生成了一个在三维空间中水平的图表。我该如何把这个图表变成垂直的,让它面向用户呢?

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

3 个回答

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

你可以使用 view_init() 函数来设置三维图的视角。下面的例子是针对 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()
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)这样做的话,图会稍微向后移动一点)。

撰写回答