6
$\begingroup$

Does Mathematica have a function, similar to the one called coneplot in MATLAB? Given some spatial coordinates $x, y, z$ and velocity components $v_x,v_y,v_z$, it is able to produce the following graphs:

coneplot

When I plot my data with ListVectorPlot3D, I don't get any arrows shown. Here is a sample data, in the form $((x,y,z),(v_x,v_y,v_z))$:

data={{{0., 0.847912, 9.48902}, {0., 0., 0.}}, {{0.00773322, -0.0110065, 
   9.09927}, {0., 0., 0.}}, {{-1.00008, -0.0623481, 9.49984}, {0., 0.,
    0.}}, {{0., 0.847912, 10.8969}, {0., 0., 0.}}, {{0., 0.847912, 
   12.5007}, {0., 0., 0.}}, {{0., 0.847912, 14.1046}, {0., 0., 
   0.}}, {{0., 0.847912, 15.5729}, {0., 0., 0.}}, {{0., 0.847912, 
   16.6107}, {0., 0., 0.}}, {{0., 0.847912, 17.3334}, {0., 0., 
   0.}}, {{0., 0.847912, 18.0983}, {0., 0., 0.}}, {{0., 0.847912, 
   18.8639}, {0., 0., 0.}}, {{0., 0.847912, 19.9409}, {0., 0., 
   0.}}, {{0., 0.847912, 21.3189}, {0., 0., 0.}}, {{0., 0.847912, 
   22.822}, {0., 0., 0.}}, {{0., 0.847912, 24.6036}, {0., 0., 
   0.}}, {{0., 0.847912, 26.2343}, {0., 0., 
   0.}}, {{-1.08457, -0.0217237, 10.6779}, {0., 0., 
   0.}}, {{-1.11085, -0.0731095, 12.19}, {0., 0., 
   0.}}, {{-1.1131, -0.0651947, 13.7893}, {0., 0., 
   0.}}, {{-1.10496, -0.0720509, 15.108}, {0., 0., 
   0.}}, {{-1.12255, -0.0365039, 16.0888}, {0., 0., 
   0.}}, {{-1.12699, -0.00227834, 16.8818}, {0., 0., 0.}}, {{-1.15057,
    0.0126093, 17.6497}, {0., 0., 0.}}, {{-1.13931, -0.015588, 
   18.4211}, {0., 0., 0.}}, {{-1.03192, -0.0742988, 19.1016}, {0., 0.,
    0.}}, {{-1.24186, -0.0317904, 19.9972}, {0., 0., 
   0.}}, {{-1.14942, -0.0360112, 20.9677}, {0., 0., 
   0.}}, {{-1.09896, -0.0167395, 21.9511}, {0., 0., 
   0.}}, {{-1.117, -0.0452791, 23.2337}, {0., 0., 
   0.}}, {{-1.1522, -0.056303, 24.8936}, {0., 0., 
   0.}}, {{-1.09607, -0.110654, 26.195}, {0., 0., 
   0.}}, {{0.103537, -0.0647147, 26.6637}, {0., 0., 0.}}, {{0., 
   0.847912, 41.3051}, {0., 0., 0.}}, {{-0.012139, -0.0295375, 
   40.9221}, {0., 0., 0.}}, {{-0.857944, -0.0671514, 41.3642}, {0., 
   0., 0.}}, {{0., 0.847912, 42.4678}, {0., 4.67035*10^-7, 0.}}, {{0.,
    0.847912, 43.5378}, {0., 0., 0.}}, {{-0.979967, -0.033538, 
   42.2371}, {0., 0., 0.}}, {{-1.14769, -0.0351505, 43.0033}, {0., 0.,
    0.}}, {{-0.979351, -0.0342237, 43.8374}, {0., 0., 
   0.}}, {{-1.23767, -0.0499179, 44.5971}, {0., 0., 
   0.}}, {{-1.13972, -0.0000850668, 45.3128}, {0., 0., 
   0.}}, {{-1.12545, -0.00826265, 46.0778}, {0., 0., 
   0.}}, {{-1.1223, -0.0359113, 46.8929}, {0., 0., 
   0.}}, {{-1.12465, -0.055138, 47.8623}, {0., 0., 
   0.}}, {{-1.09846, -0.0144483, 49.0776}, {0., 0., 
   0.}}, {{-1.10899, -0.0625359, 50.4507}, {0., 0., 
   0.}}, {{-1.14579, -0.108309, 52.0417}, {0., 0., 
   0.}}, {{-1.12848, -0.01126, 54.0108}, {0., 0., 
   0.}}, {{-1.11299, -0.0970175, 55.2159}, {0., 0., 0.}}, {{0., 
   0.847912, 44.6206}, {0., 0., 0.}}, {{0., 0.847912, 45.3961}, {0., 
   0., 0.}}, {{0., 0.847912, 46.2075}, {0., 0., 0.}}, {{0., 0.847912, 
   47.3219}, {0., 0., 0.}}, {{0., 0.847912, 48.6172}, {0., 0., 
   0.}}, {{0., 0.847912, 50.0586}, {0., 0., 0.}}, {{0., 0.847912, 
   51.6502}, {0., 0., 0.}}, {{0., 0.847912, 53.7857}, {0., 0., 
   0.}}, {{0., 0.847912, 55.2595}, {0., 0., 
   0.}}, {{0.119852, -0.0804816, 55.6719}, {0., 0., 
   0.}}, {{1.38231, -0.0646805, 9.63683}, {0., 0., 
   0.}}, {{3.08676, -0.0356642, 10.2185}, {0., 0., 0.}}, {{3.98277, 
   0.0329428, 10.6312}, {0., 0., 0.}}, {{1.64587, 0.847912, 
   10.1128}, {0., 0., 0.}}, {{2.94532, 0.847912, 10.6054}, {0., 0., 
   0.}}, {{3.0844, 0.847912, 26.2343}, {0., 0., 0.}}, {{6.37314, 
   0.847912, 26.2343}, {0., 0., 0.}}, {{8.83598, 0.847912, 
   26.2343}, {0., 0., 0.}}, {{2.68672, -0.0254293, 26.6613}, {0., 0., 
   0.}}, {{5.13989, -0.0481681, 26.6588}, {0., 0., 
   0.}}, {{7.07074, -0.0263853, 26.6521}, {0., 0., 0.}}, {{8.87196, 
   0.0308362, 26.6941}, {0., 0., 0.}}, {{0.908045, -0.0256653, 
   41.2951}, {0., 0., 0.}}, {{0.90812, -0.0305627, 42.1266}, {0., 0., 
   0.}}, {{1.09331, -0.0723344, 42.9721}, {0., 0., 
   0.}}, {{1.03446, -0.06788, 43.5403}, {0., 0., 
   0.}}, {{1.9443, -0.0212229, 43.8278}, {0., 0., 0.}}, {{2.52323, 
   0.00655421, 44.1426}, {0., 0., 0.}}, {{1.47266, 0.847912, 
   44.0959}, {0., 0., 0.}}, {{1.47266, 0.847912, 44.6541}, {0., 0., 
   0.}}, {{3.48462, 0.847912, 55.2595}, {0., 0., 0.}}, {{9.45979, 
   0.847912, 55.2595}, {0., 0., 0.}}, {{15.9244, 0.847912, 
   55.2595}, {0., 0., 0.}}, {{20.8183, 0.847912, 55.2595}, {0., 0., 
   0.}}, {{24.5798, 0.847912, 55.2595}, {0., 0., 0.}}, {{27.9807, 
   0.847912, 55.2595}, {0., 0., 0.}}, {{4.19646, -0.079758, 
   55.6822}, {0., 0., 0.}}, {{9.8436, -0.111618, 55.6824}, {0., 0., 
   0.}}, {{17.6324, -0.0328765, 55.6789}, {0., 0., 
   0.}}, {{23.6589, -0.044735, 55.6773}, {0., 0., 
   0.}}, {{27.8005, -0.0722351, 55.6708}, {0., 0., 0.}}, {{2.94532, 
   0.847912, 11.1635}, {0., 0., 0.}}, {{2.62106, -0.0129568, 
   44.6594}, {0., 0., 0.}}, {{3.34577, -0.0199615, 44.9502}, {0., 0., 
   0.}}, {{3.9942, 0.0362858, 45.2367}, {0., 0., 0.}}, {{2.27968, 
   0.847912, 44.96}, {0., 0., 0.}}, {{2.94532, 0.847912, 
   45.2124}, {0., 0., 0.}}, {{2.94532, 0.847912, 45.7705}, {0., 0., 
   0.}}, {{4.30519, -0.0509312, 11.19}, {0., 0., 0.}}, {{5.04605, 
   0.847912, 11.9598}, {0., 0., 0.}}}
$\endgroup$
  • 4
    $\begingroup$ VectorPlot3D or ListVectorPlot3D with specyfic VectorStyle will give you cones. About the box: something like DensityPlot3D $\endgroup$ – Kuba Mar 4 '14 at 9:35
  • 1
    $\begingroup$ Why Last /@ Last /@ data is all zeros? $\endgroup$ – Helium Mar 4 '14 at 10:14
  • 1
    $\begingroup$ @BillyJean If they're all zeros then there's nothing to plot!! Of course it "doesn't work" with ListVectorPlot3D. All the vectors have zero length, and they're invisible. $\endgroup$ – Szabolcs Mar 4 '14 at 14:21
  • 1
    $\begingroup$ While responding to @Szabolcs's comment, can you also specify what features are most important to you? Cones as arrows? Pretty specular cones? Cone sizes? pretty axes? If it is "all of the above", then at least prioritizing might help out a bit. $\endgroup$ – bobthechemist Mar 4 '14 at 14:26
  • 1
    $\begingroup$ Is VectorColorFunction->Hue what you are after? $\endgroup$ – bobthechemist Mar 4 '14 at 14:54
8
$\begingroup$

Just tossing a thought out there. Using the following sample data from ListVectorPlot3D, Graphics directives can be applied to VectorStyle to get a shape you desire:

vectors = 
  Table[{{x, y, z}, {y, x - x^3, z}}, {x, -1.5, 1.5, 0.2}, {y, -2, 2, 
    0.2}, {z, -1, 1, 0.1}];
ListVectorPlot3D[vectors, VectorScale -> 0.05, 
 VectorStyle -> {Specularity[White, 20], Red, 
   Graphics3D[Cone[{{-2, 0, 0}, {1.5, 0, 0}}, 0.5]]}]

Mathematica graphics

Vector list plotting requires a structured grid of datapoints, otherwise the interpolation of the points fails and you get an empty plot without warning. Under circumstances where you cannot obtain data on a structured grid, creating a plot with graphics directives may be a better alternative.

Using your data = data + 1 option:

Graphics3D[{Specularity[White, 20], {ColorData["DarkRainbow"][Norm[#[[2]]]], 
  Cone[{#[[1]], #[[1]] + 1 + 1 #[[2]]}, 0.5 Norm[#[[2]]]]} & /@ data}, Axes -> True]

Mathematica graphics

Not a terribly pretty plot IMO, but I don't know what you are expecting from the sample data.

$\endgroup$
  • $\begingroup$ Thanks -- is there a way to do the same with the same format as my data? I know the velocities are zero, but say you use data=data+1 instead. $\endgroup$ – BillyJean Mar 4 '14 at 15:24
  • $\begingroup$ @BillyJean your data fall on an unstructured grid, and the interpolation function used by ListVectorPlot3D is having troubles with that. If it is possible to generate the data on a structured grid, then you will run in to fewer problems. $\endgroup$ – bobthechemist Mar 4 '14 at 16:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.