【问题标题】:How can I connect points on a 3D scatter plot?如何连接 3D 散点图上的点?
【发布时间】:2016-06-08 20:01:02
【问题描述】:

所以目前,我拥有所有这些坐标,因此很容易创建所有坐标组合的 3D 散点图。

fig = plt.figure(figsize=(20,10))
ax = plt.axes(projection='3d')

z = numpy.transpose(z_coords_row)[0:100]
x = numpy.transpose(x_coords_row)[0:100]
y = numpy.transpose(y_coords_row)[0:100]

plt.xticks(numpy.arange(-1.5, 1.5, .25))
plt.yticks(numpy.arange(-1.5, 1.5, .5))

ax.scatter(x, y, z,s=1)
ax.view_init(elev=10., azim=45)

这段代码给了我这样的结果:http://i.stack.imgur.com/KKw1D.png

我在尝试用一条线将每个点按顺序连接到下一个点时遇到了很多问题。如何将数组中的每个点与下一个点连接起来,使其成为平滑线图?

【问题讨论】:

  • 我对 3d 图表一无所知...但我知道这个过程称为interpolation。根据 wiki,插值是一种在一组离散的已知数据点范围内构造新数据点的方法。也许这个新关键字会对您有所帮助。
  • 从我目前使用的情况来看,插值仅适用于一维并且只提供更多的点集而不是一条线?如果我错了,任何人都可以纠正我

标签: python matplotlib 3d


【解决方案1】:

如果您仅使用坐标有足够的点数,我认为您正在寻找的是plot3D。如果您需要更流畅的线条,可能值得研究scipy.interpolate.RegularGridInterpolator,这将有助于生成更多点,然后您可以将其插入plot3D

plot3D的使用示例:

import numpy
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(20,10))
ax = plt.axes(projection='3d')

z_coords_row = numpy.sin(numpy.linspace(0,2*numpy.pi,100))+5
x_coords_row = numpy.sin(numpy.linspace(0,2*numpy.pi,100))
y_coords_row = numpy.cos(numpy.linspace(0,2*numpy.pi,100))

z = numpy.transpose(z_coords_row)[0:100]
x = numpy.transpose(x_coords_row)[0:100]
y = numpy.transpose(y_coords_row)[0:100]

plt.xticks(numpy.arange(-1.5, 1.5, .25))
plt.yticks(numpy.arange(-1.5, 1.5, .5))

ax.scatter(x, y, z,s=5)
ax.plot3D(x,y,z)
ax.view_init(elev=10., azim=45)

【讨论】:

  • 当我尝试使用 ax.plot3D(x,y,z) 时,它给了我错误:'ValueError:third arg must be a format string'。我用错了吗?
  • @JesseBatson 你能确认你的ax 的类型是matplotlib.axes._subplots.Axes3DSubplot'吗?
  • 它验证了
  • 我不知道这是否重要,但我也在使用 Python 2.7,以防你碰巧使用不同的版本?
  • @JesseBatson 上面的代码适用于 3.x 和 2.7。您能否尝试将上面的确切代码作为独立脚本运行(在末尾添加 plt.show())或在带有 %matplotlib inline 的 jupyter 笔记本中运行它。
猜你喜欢
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多