在三维图中连接点

时间:2014-10-20 08:40:26

标签: python matplotlib 3d space plane

我有一个可以通过两个参数控制的算法,所以现在我想根据这些参数绘制算法的运行时间。

我的代码:

from matplotlib import pyplot
import pylab
from mpl_toolkits.mplot3d import Axes3D

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

sequence_containing_x_vals = [5,5,5,5,10,10,10,10,15,15,15,15,20,20,20,20]
sequence_containing_y_vals = [1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4]
sequence_containing_z_vals = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

ax.scatter(sequence_containing_x_vals, sequence_containing_y_vals, sequence_containing_z_vals)

pyplot.show()

这将绘制空间中的所有点,但我希望它们连接起来并且有类似的东西:

Example plot

(着色很好但不是必需的)

1 个答案:

答案 0 :(得分:0)

要绘制表面,您需要使用plot_surface,并将数据作为常规2D数组(反映x-y平面的2D几何)。通常使用meshgrid,但由于您的数据已经适当地重复了x和y值,因此您只需要重新整形它们。我用numpy reshape做了这个。

from matplotlib import pyplot, cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

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

sequence_containing_x_vals = np.array([5,5,5,5,10,10,10,10,15,15,15,15,20,20,20,20])
X = sequence_containing_x_vals.reshape((4,4))

sequence_containing_y_vals = np.array([1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4])
Y = sequence_containing_y_vals.reshape((4,4))

sequence_containing_z_vals = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
Z = sequence_containing_z_vals.reshape((4,4))

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.hot)

pyplot.show()

enter image description here

请注意,X, Y = np.meshgrid([1,2,3,4], [5, 10, 15, 20])会提供与上述相同的XY,但更容易。

当然,此处显示的曲面只是一个平面,因为您的数据与z = x + y - -5一致,但此方法适用于通用曲面,如许多matplotlib surface示例中所示。