# Trouble with ListVectorPlot3D

I am trying to visualize a complex vector field. However, I seem to have difficulty with the usage of ListVectorPlot3D. The following example works in two dimension, but not in 3D.

I define three points and three vectors:

phasePRange = {{0., 1.}, {-2.5, 2.5}, {-2.5, 2.5}};
phaseBRatios = {1., 2.5, 2.5};

myps =
{{0.6317509602269538, 0., 0.},
{0.6315222309581698, -0.49206031006953616, 0.8084147318366528},
{0.6309571144534679, -0.3287921492246488, 1.4140959092626375}};

myvs =
{{-6.627612561711319*^-11, -0.5525297131274786, 0.8334932009988242},
{-0.0005729018280423939, -0.39025963088261206, 0.9207046715895726},
{-0.0005483923990602963, 0.884592445730268, 0.46636456149960553}};

and I can display them using the Arrow command:

Graphics3D[
{{Black, PointSize[.03], Point[myps[[1]]]},
{Black, PointSize[.03], Point[myps[[2]]]},
{Black, PointSize[.03], Point[myps[[3]]]},
{Blue, Arrow[{myps[[1]], myps[[1]] + myvs[[1]]}]},
{Red, Arrow[{myps[[2]], myps[[2]] + myvs[[1]]}]},
{Green, Arrow[{myps[[3]], myps[[3]] + myvs[[3]]}]}}},
Axes -> True,
Boxed -> True,
BoxRatios -> phaseBRatios,
PlotRange -> phasePRange]

However, when I evaluate

myfield = Transpose[{myps, myvs}]
ListVectorPlot3D[myfield,
VectorPoints -> All,
VectorScale -> {1., Scaled[.1]},
BoxRatios -> phaseBRatios,
AxesLabel -> {"ϵ","u","y"},
PlotRange -> phasePRange]

I get an empty box with no arrows.

I woudl apprecaite any help to figure out my mistake.

• Thank you very much for improving my post layout. Nov 16 '16 at 20:02

The problem is with the data. ListVectorPlot3D is a variation of VectorPlot3D that attempts to interpolate the data you supply to reproduce the underlying function. If it can't interpolate, it will not draw anything or produce an error. The documentation says:

ListVectorPlot3D by default interpolates the data given and plots vectors for the vector field at a regular 3D grid of positions.

Also, the format for ListVectorPlot3D comes in two flavors (see here). You need to make sure you are either providing pairs of points/vectors sufficient for interpolation, or you are giving an array of vectors.

As a thought experiment, think about this in 2D. You need to provide at least 3 data points for the interpolation to work. So, if you want to have a field of straight vectors and you try to do it by simply doing

ListVectorPlot[{{{0, 0}, {1, 1}}, {{1, 1}, {1, 1}}}]

it wouldn't work -- can't interpolate with two points. So, you need to add a third point, like this:

ListVectorPlot[{{{0, 0}, {1, 1}}, {{.5, .5}, {1, 1}}, {{1, 1}, {1, 1}}}]

The same is true about 3D. You have to provide enough data points so that they can be interpolated.