【问题标题】:How to project 3D scatter points onto the xy-plane?如何将 3D 散点投影到 xy 平面上?
【发布时间】:2018-06-13 04:57:24
【问题描述】:

这是有问题的图表,点应该出现在 底部平面中,而不是像我想的那样“高于”平面。

bx.scatter(xs,ys,zs, zdir=zs,c=plt.cm.jet(np.linspace(0,1,N))) # scatter points
for i in range(N-1):
    bx.plot(xs[i:i+2], ys[i:i+2], zs[i:i+2], color=plt.cm.jet(i/N), alpha=0.5) 
   #plots the lines between points
bx.scatter(xs,ys,zs=732371.0,zdir="z",c=plt.cm.jet(np.linspace(0,1,N)),depthshade=True)   
 bx.set_zlim3d(732371.0,) #limit is there so that we can project the points onto the xy-plane

你会注意到这些点是在 xy 网格上方绘制的,我必须为 z 轴设置一个下限,以便第一个投影点不会干扰第一个散点

我希望这些点是 2d 的,并且不那么 hacky,因为我有 50 个其他图表来做这样的事情,而对每个图表进行微调会很麻烦。

有更简单的方法要分享吗?

【问题讨论】:

  • 为什么不把 Z 坐标设置为零?
  • 因为 z 轴采用日期时间格式,如果我输入 0,则表示“从 1970 年开始 z 轴”,并且无法读取图表。如果我没记错的话,这就是我使用 2006-03-01 的 732371.0 的原因

标签: python matplotlib 3d scatter-plot


【解决方案1】:

有很多选择,最终取决于您在其他图中的数据范围。

1) 将投影点偏移固定量 您可以计算最小 Z 值,并将投影绘制为与该最小值的固定偏移量。

zs=min(zs)-offset

2) 以取决于数据范围的相对量偏移投影。 您可以考虑数据的范围(即从最小 Z 到最大 Z 的距离)并计算与其成比例的偏移量(例如 10-15%)。

zs=min(zs)-0.15*(max(zs)-min(zs))

【讨论】:

  • 谢谢。方法 2 挤压平面上的所有点,但 1) 效果很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2023-03-08
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
相关资源
最近更新 更多