matplotlib - 带有多条线的 3d 图,显示 xy 平面上的投影
问题描述
我想知道如何通过多条线显示在 xy 平面上的投影的 3d 图,fill_between
但在 3D 中。我这里有一个示例代码。
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()
我希望将每条线“投影”在 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()
让我困惑的一件事是阴影没有得到线条的颜色,我必须自己提供。如果你删除你总是得到蓝色阴影color=colors[color]
,Poly3DCollection
而线条会自动得到不同的颜色,正如在问题中看到的那样。有人知道这是什么原因吗?
推荐阅读
- powershell - 在 TFS 2015 构建中运行 PowerShell 脚本时无法加载模块错误
- php - “if”语句比较运算符的操作顺序
- javascript - 如何在 Phaser 3 中旋转区域?
- asp.net - Datadog - 监控由 IIS 托管的同一站点中的多个应用程序
- c# - 如何使用 Moq 模拟扩展方法 | 网址.Page()
- php - mysqli_num_rows($result)==0 返回错误
- laravel - Laravel Nova 未来指标趋势
- python - 如何使用分隔符拆分 Ansible 中的值
- java - 使用带有托管服务标识的 Spring api 获取 keyvault 机密
- python - 如何使用 sklearn 制作一维高斯混合的直方图?