Re: options for VectorPlot in version 7 vs
- To: mathgroup at smc.vnet.net
- Subject: [mg104144] Re: options for VectorPlot in version 7 vs
- From: Dan Dubin <ddubin at ucsd.edu>
- Date: Wed, 21 Oct 2009 06:28:35 -0400 (EDT)
- References: <19419092.1255952174136.JavaMail.root@n11>
Hi -- in David's fix the problem remains that unit vectors do not "look" like unit vectors when the x and y scales are different. This is solved in David's code by adding a scale factor to the unit vectors that varies according to the direction of the unit vector: f[x_, y_] = -.05 x + .0001 x y; g[x_, y_] = .1 y - .005 x y; points = Flatten[Table[{x, y}, {x, -5, 75, 5}, {y, 0, 2500, 250}], 1]; arrow[{x_, y_}] := Arrow[{{x, y} - 2 Normalize[{f[x, y], g[x, y]}] Sqrt[f[x, y]^2 + g[x, y]^2]/ Max[10^-12, Sqrt[( f[x, y])^2 + ((90/2500) g[x, y])^2]], {x, y} + 2 Normalize[{f[x, y], g[x, y]}] Sqrt[f[x, y]^2 + g[x, y]^2]/ Max[10^-12, Sqrt[( f[x, y])^2 + ((90/2500) g[x, y])^2]]}] Graphics[{Arrowheads[.01], arrow /@ points}, AspectRatio -> 1, PlotRange -> {{-10, 80}, {-200, 2700}}, Frame -> True] The same scaling works in VectorPlot: field = VectorPlot[{f[x, y], g[x, y]}, {x, 1, 70}, {y, 0, 2500}, PlotRange -> {{0, 70}, {0, 2500}}, VectorPoints -> {15, 15}, Frame -> True, AspectRatio -> 1, VectorScale -> {.04, .04, Sqrt[f[#1, #2]^2 + g[#1, #2]^2]/ Max[10^-12, Sqrt[(f[#1, #2])^2 + ((70/2500) g[#1, #2])^2]] &}] >I'm sure WRI has a way, but it is very difficult to find a Help example that >doesn't have the same x and y scale. > >If you don't get a better answer you could try something like this: > >points = Flatten[Table[{x, y}, {x, -5, 75, 5}, {y, 0, 2500, 250}], 1]; > >arrow[{x_, y_}] := > Arrow[{{x, y}, {x, y} + Normalize[{f[x, y], g[x, y]}]}] > >Graphics[{Arrowheads[.03], arrow /@ points}, > AspectRatio -> 1, > PlotRange -> {{-10, 80}, {-200, 2700}}, > Frame -> True] > > >David Park >djmpark at comcast.net >http://home.comcast.net/~djmpark/ > > > > > > >From: janey [mailto:janemkiwi at gmail.com] > >Dear Mathematica Usenet Group, > >I have been having a lot of problems with finding appropriate options >in Version 7 for VectorPlot that give an acceptable, viewable plot >when scales on the horizontal and vertical axes are different (I am >trying to get predator prey phase portraits, plotting population of >predator vs population of prey; obviously there are far more prey than >predators). > >My only solution so far has been to put up with the complaints from >using ><< VectorFieldPlots` >about the version 6 legacy version. > >For example, the following works just fine (apart from annoying >warnings) in version 7 given that it uses the version 6 command >VectorFieldPlot in place of version 7's VectorPlot: > ><< VectorFieldPlots`; > >f[x_, y_] = -.05 x + .0001 x y; g[x_, y_] = .1 y - .005 x y; > >field = VectorFieldPlot[{f[x, y], g[x, y]}, {x, 1, 70}, {y, 0, 2400}, > PlotPoints -> {15, 15}, Frame -> True, AspectRatio -> 1] > >With Version 7's VectorPlot, although I can specify the number of >arrows to be shown with VectorPoints replacing PlotPoints, I have not >been able to set VectorScale to give me anywhere near an acceptable >plot. > >So in version 7, > >f[x_, y_] = -.05 x + .0001 x y; g[x_, y_] = .1 y - .005 x y; > >field = VectorPlot[{f[x, y], g[x, y]}, {x, 1, 70}, {y, 0, 2400}, > VectorPoints -> {15, 15}, Frame -> True, AspectRatio -> 1] > >looks very bad. > >Is there some source of information for manipulating these options >somewhere besides the Mathematica Documentation Center's minimalist >examples? If not, is anyone willing to share how to get success with >this? > > >Any help you can give me would be much appreciated, >thanks >Janey. -- --------------- | Professor Dan Dubin | Dept of Physics , Mayer Hall Rm 3126, | UC San Diego La Jolla CA 92093-0319 | phone (858) - 534-4174 fax: (858)-534-0173 | ddubin at ucsd.edu