MATLAB: How does QUIVER scale the vectors it plots

MATLAB

I would like to understand how QUIVER determines the lengths of the vectors it plots.
How can I determine the amount by which the vectors were scaled?

Best Answer

There are two independent scaling operations that occur when making a Quiver plot. First, the lengths of the arrows are scaled to fit within the plot area without overlapping. Next, scaling is performed as determined by the 'AutoScale' and 'AutoScaleFactor' properties.
Unfortunately, there is no way to retrieve the scale factor that is applied internally in the first scaling operation of the QUIVER command.
As a workaround, it is possible to create a Quiver plot with arrows scaled by a known amount by turning off the 'AutoScale' option. The U- and V- data can be scaled manually as necessary to improve the aesthetics of the plot. By performing this scaling manually, a known scale factor can be used. For example,
x = [0 0]
y = [0 10]
u = [10 0]
v = [0 10]
quiver(x,y,u,v)
produces arrows with lengths of about 6.364. To get better control over these lengths, manually scale the vectors:
scale_factor = 0.5;
quiver(x,y,u*scale_factor,v*scale_factor,'AutoScale','off')
The commands produce arrows of length 5.