24

I have an array of data with 3D elements. Ex: x = {{1,2,3}, {3,4,5}, {5,6,7}}. I want to show this data in 3 dimensions, such that each point in the space is shown as a vector originating from the origin. There should be an arrow/line whose one end is at the origin $(0,0,0)$ and the other end at the point $(1,2,3)$.

Which function should I use?

Verbeia
  • 34,233
  • 9
  • 109
  • 224
London guy
  • 453
  • 1
  • 3
  • 6

3 Answers3

24

For your problem, it is probably easiest to build the graphic out of graphics primitives rather than use a pre-made convenience function such as ListPointPlot3D.

This is one way to do it:

data = {{1, 2, 3}, {3, 4, 5}, {5, 6, 7}};

Graphics3D[Arrow[{{0, 0, 0}, #}] & /@ data]

Mathematica graphics

I simply used the Arrow graphics primitive. I constructed a pure function that makes an arrow starting from the origin, and mapped it over the data.

Szabolcs
  • 234,956
  • 30
  • 623
  • 1,263
10

I wasn't able to find a way to make ListPointPlot3D draw lines instead of points.

As an alternative to Szabolcs' Graphics3D, here is a slightly different way using ParametricPlot3D and a replacement rule.

data = {{1, 2, 3}, {3, 4, 5}, {5, 6, 7}};
ParametricPlot3D[data*u, {u, 0, 1}] /. Line -> Arrow

enter image description here

Verbeia
  • 34,233
  • 9
  • 109
  • 224
0

There are many good answers to this problem. Another is to use Arrow function:

Graphics3D[Arrow[{{0, 0, 0}, {2, 3, 4}}]], Axes -> True, 
 AxesLabel -> {x, y, z}]
Kuba
  • 136,707
  • 13
  • 279
  • 740