我有一个按时间排序的三维点列表。有没有办法绘制点,以便我可以获得一个视觉表示,其中还包括列表中出现点的位置的信息?我最初的想法是找到一种方法,按照绘制顺序对点进行着色。
ListPlot3D
在点上覆盖一张纸,不考虑它们的绘制顺序。
ListPointPlot
只显示这些点,但没有说明它们的绘制顺序。在这里,我正在考虑根据它们在列表中出现的顺序对点进行着色。
ListLinePlot
似乎没有3D表兄弟。
答案 0 :(得分:12)
您也可以执行类似
的操作lst = RandomReal[{0, 3}, {20, 3}];
Graphics3D[{Thickness[0.005],
Line[lst,
VertexColors ->
Table[ColorData["BlueGreenYellow"][i], {i,
Rescale[Range[Length[lst]]]}]]}]
答案 1 :(得分:5)
由于你没有提供例子,我通过创建一个3d自我避免随机游走来构建一些:
Clear[saRW3d]
saRW3d[steps_]:=
Module[{visited},
visited[_]=False;
NestList[
(Function[{randMove},
If[
visited[#+randMove]==False,
visited[#+randMove]=True;
#+randMove,
#
]
][RandomChoice[{{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}}]])&,
{0,0,0},
steps
]//DeleteDuplicates
]
(这是一种有缺陷的但是可以完成工作;它会在3d中产生随机游走,避免自身,即避免在后续步骤中重新访问相同的位置。)
然后我们生成100000个这样的步骤
dat = saRW3d[100000];
这就像我理解你的数据点一样。然后,我们将这些更改颜色取决于它的步骤:
datpairs = Partition[dat, 2, 1];
len = Length@datpairs;
dressPoints[pts_, lspec_] := {RGBColor[(N@First@lspec)/len, 0, 0],
Line@pts};
datplt = MapIndexed[dressPoints, datpairs];
这也可以像其他答案一样一次完成
datplt=MapIndexed[
{RGBColor[(N@First@#2)/Length@dat, 0, 0], Line@#1} &,
Partition[dat, 2, 1]
]
但我倾向于避免这种结构,因为我发现它们更难以阅读和修改。
最后绘制结果:
Graphics3D[datplt]
随着时间的推移,路径变得越来越红。
如果这是你所追求的事情,我可以详细说明。
编辑:可能有更简单的方法来做到这一点......
EDIT2:显示一大组要点,以证明在arrows无法轻易扩展的情况下,查看定性趋势非常有用。
EDIT3:添加了单行版本。
答案 2 :(得分:4)
我认为Heike的方法是最好的,但她让它变得过于复杂,恕我直言。我会用:
Graphics3D[{
Thickness[0.005],
Line[lst,
VertexColors ->
ColorData["SolarColors"] /@ Rescale@Range@Length@lst ]
}]
(acl的数据)
答案 3 :(得分:2)
Graphics3D@(Arrow /@ Partition[RandomInteger[{0, 10}, {10, 3}], 2, 1])
答案 4 :(得分:2)
关于你的上一个问题:如果你想要一种ListLinePlot3D
代替ListPointPlot
,你可以简单地执行以下操作:
pointList =
Table[{t, Sin[t] + 5 Sin[t/10], Cos[t] + 5 Cos[t/10],
t + Cos[t/10]}, {t, 0, 100, .5}];
ListPointPlot3D[pointList[[All, {2, 3, 4}]]] /. Point -> Line
当然,通过这种方式,您无法设置行属性,因此如果需要,您必须稍微更改规则:
ListPointPlot3D[pointList[[All, {2, 3, 4}]]] /.
Point[a___] :> {Red, Thickness[0.02], Line[a]}
或
ListPointPlot3D[pointList[[All, {2, 3, 4}]]] /.
Point[a___] :> {Red, Thickness[0.002], Line[a], Black, Point[a]}
但是,为什么不使用Graphics3D和一些图形基元?