从matplotlib中的xy平面中的点到(x,y,z)点延伸线

时间:2016-03-25 20:34:59

标签: python matplotlib

我正在尝试创建一条从xy平面中的(x,y)点开始并以(x,y,z)值结束的行。

这在matplotlib中是否可行?

以下是我所拥有的一个例子: enter image description here

与我想要的: enter image description here

这里我们有点(1,1,1)。所以基本上我想知道是否有可能将2D中的(1,1)线延伸到3D中的(1,1,1)。

希望我的问题能够清楚地理解这个例子。

2 个答案:

答案 0 :(得分:0)

这没有任何意义。如果您在三维中工作,那么每个点都可以用三个维度来描述,包括您的起点。在三维空间中描述仅具有两个坐标的东西基本上描述了一条线;如果你只是明确地标记了x和y坐标,那么所有可能的z值都是有效的 - 所以你最终会得到一条线。

您要做的是使其中一个坐标(x,y或z)为零。

答案 1 :(得分:0)

这就是我所做的。

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

fig = plt.figure(figsize=(1[![enter image description here][1]][1]5,10))

ax = fig.add_subplot(111, projection='3d')

# points
xs = np.asarray([np.cos(i) for i in np.arange(0,np.pi/2,(np.pi/2)/10)])
ys = np.arange(0,10,1)
zs = np.arange(0,10,1)

# plot points
ax.scatter(xs=xs, ys=ys, zs=zs, s=200, c=zs, cmap=cm.viridis_r, alpha=1.0)

# create the line
zs_l = np.asarray([[i, -1] for i in zs])

# color list
cl = [cm.get_cmap('viridis_r')(i/zs_l.shape[0]) for i in range(zs_l.shape[0])]
# draw the lines 
for i, p in enumerate(zs_l):
    ax.plot(xs=[xs[i]]*2, ys=[ys[i]]*2, zs=zs_l[i], markersize=0, lw=3, c=cl[i])

Final plot.