The option VectorPoints
determines how many vector boxes there are. The plot domain is subdivided into a grid, whose grid points span the plot domain in each direction. Equal-size rectangular boxes surround each grid point so that the boxes are adjacent and tile the plot range (ignoring any padding).
Here is a picture with VectorPoints -> 9
(the default is 15):
VectorPlot[{x, y}, {x, -1, 1}, {y, -1, 1},
VectorPoints -> 9,
GridLines -> With[{n = 8}, {#, #} &@Range[-1 - 1/n, 1 + 1/n, 2/n]]]

Here is a utility function I'll use to explore various settings:
vsplot[unitlen_, aratio_: Automatic, sfun_: Automatic, vf_: {x, y}] :=
VectorPlot[vf, {x, -1, 1}, {y, -1, 1},
VectorPoints -> 9,
GridLines -> With[{n = 8}, {#, #} &@Range[-1 - 1/n, 1 + 1/n, 2/n]],
VectorScale -> {unitlen, aratio, sfun}]
unitlen
With unitlen = 1/9
(middle), the longest vector just fits in the box and the rest are scaled proportionally. Here the length is 1/9 the overall width of the domain, where the 9 is the number of PlotPoints
. If using the default, the PlotPoints
are 15 and the corresponding unitlen
should be 1/15
. Other settings are scaled versions of this, either exceeding the boundaries of the boxes or staying well within the box.
GraphicsRow@Table[vsplot[l], {l, {1/5, 1/9, 1/12}}]

aratio
A numeric setting makes all arrowheads an absolute constant size. With Scaled[a]
, the size of the arrowhead depends on the length of the vector. @xzczd points out, aratio
probably should be read as standing for "arrowhead ratio" and not "aspect ratio" as stated in the documentation for VectorScale
.
GraphicsRow@Table[vsplot[1/9, a], {a, {1/2, 1, 2}}]

GraphicsRow@Table[vsplot[1/9, Scaled[a]], {a, {1/2, 1, 2}}]

sfun
The length of the vector is proportional to the value of sfun
, which according to the documentation is to be
a function of x
, y
, fx
, fy
, Norm[{fx,fy}]
I'm not sure why one would want to change the vector length, other than to make them all the same length or perhaps use things like ArcTan[#5] &
or Log[#5] &
to attenuate the rapid growth of the length of the vectors of a vector field.
The columns below each show the same vector field scaled according to one of the arguments. The last pair are roughly inversely proportional to the length of the vector, which give somewhat misleading views of the actual vector fields.
GraphicsGrid@
Table[Show[vsplot[1/9, Automatic, f, vf],
PlotLabel -> Row[{sfun, "=", f, ", ", {fx, fy}, "=", vf}],
ImageSize -> 200],
{f, {#1 &, #2 &, #3 &, #4 &, 1/(1 + #5) &}},
{vf, {{x, y}, {-y + x, y + x}}}]
