具有多条线的 3d 图显示在 xy 平面上的投影
3d plot with multiple lines showing the projection on the xy plane
我想知道如何通过类似 fill_between
但在 3D 中的方式制作多条线的 3d 图,显示 xy 平面上的投影。我这里有一个示例代码。
fig, ax = plt.subplots(figsize=(12,8),subplot_kw={'projection': '3d'})
for i in np.arange(0.0,1,0.1):
x1=np.arange(0,1-i+0.01,0.01)
y1=1.0-i-x1
def z_func(x,y,z):
return x+y**2+0.5*z #can be any fn
coordinates3= [[i,j,1-i-j] for j in np.arange(0,1-i+0.01,0.01)]
z1=np.array([z_func(*k) for k in coordinates3])
ax.plot(x1,y1,z1)
ax.view_init(azim=10,elev=20)
plt.show()
我希望每条线 'projected' 位于 xy 平面上,并在曲线及其投影之间填充阴影。有谁知道快速的方法吗?
在@ImportanceOfBeingErnest 的评论中提出建议后,我能够编写一个解决方案。我想到了这个:
fig, ax = plt.subplots(figsize=(12,8),subplot_kw={'projection': '3d'})
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
for color,i in enumerate(np.arange(0.0,1,0.1)):
x1=np.arange(0,1-i+0.01,0.01)
y1=1.0-i-x1
def z_func(x,y,z):
return x+y**2+0.5*z #can be any fn
coordinates3= [[i,j,1-i-j] for j in np.arange(0,1-i+0.01,0.01)]
z1=np.array([z_func(*k) for k in coordinates3])
verts=[[(k[1],k[2],z_func(*k)) for k in coordinates3]]
verts[0].insert(0,(coordinates3[0][1],coordinates3[0][2],0))
verts[0].insert(0,(coordinates3[-1][1],coordinates3[-1][2],0))
poly = Poly3DCollection(verts,color=colors[color])
poly.set_alpha(0.2)
ax.add_collection(poly)
ax.plot(x1,y1,z1,linewidth=10)
ax.view_init(azim=10,elev=20)
plt.show()
让我困惑的一件事是阴影没有得到线条的颜色,我不得不自己提供。如果你删除 Poly3DCollection
中的 color=colors[color]
你总是会得到蓝色阴影,而线条会自动获得不同的颜色,正如你在问题中看到的那样。有人知道这是什么原因吗?
我想知道如何通过类似 fill_between
但在 3D 中的方式制作多条线的 3d 图,显示 xy 平面上的投影。我这里有一个示例代码。
fig, ax = plt.subplots(figsize=(12,8),subplot_kw={'projection': '3d'})
for i in np.arange(0.0,1,0.1):
x1=np.arange(0,1-i+0.01,0.01)
y1=1.0-i-x1
def z_func(x,y,z):
return x+y**2+0.5*z #can be any fn
coordinates3= [[i,j,1-i-j] for j in np.arange(0,1-i+0.01,0.01)]
z1=np.array([z_func(*k) for k in coordinates3])
ax.plot(x1,y1,z1)
ax.view_init(azim=10,elev=20)
plt.show()
我希望每条线 'projected' 位于 xy 平面上,并在曲线及其投影之间填充阴影。有谁知道快速的方法吗?
在@ImportanceOfBeingErnest 的评论中提出建议后,我能够编写一个解决方案。我想到了这个:
fig, ax = plt.subplots(figsize=(12,8),subplot_kw={'projection': '3d'})
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
for color,i in enumerate(np.arange(0.0,1,0.1)):
x1=np.arange(0,1-i+0.01,0.01)
y1=1.0-i-x1
def z_func(x,y,z):
return x+y**2+0.5*z #can be any fn
coordinates3= [[i,j,1-i-j] for j in np.arange(0,1-i+0.01,0.01)]
z1=np.array([z_func(*k) for k in coordinates3])
verts=[[(k[1],k[2],z_func(*k)) for k in coordinates3]]
verts[0].insert(0,(coordinates3[0][1],coordinates3[0][2],0))
verts[0].insert(0,(coordinates3[-1][1],coordinates3[-1][2],0))
poly = Poly3DCollection(verts,color=colors[color])
poly.set_alpha(0.2)
ax.add_collection(poly)
ax.plot(x1,y1,z1,linewidth=10)
ax.view_init(azim=10,elev=20)
plt.show()
让我困惑的一件事是阴影没有得到线条的颜色,我不得不自己提供。如果你删除 Poly3DCollection
中的 color=colors[color]
你总是会得到蓝色阴影,而线条会自动获得不同的颜色,正如你在问题中看到的那样。有人知道这是什么原因吗?