Scaling vector field marker arrow based on attribute?

You should get the desired output by recurring to a custom expression.

Firstly, click on the Edit... button for the Head length option:

enter image description here

Then, type this expression:

length(
 make_line(
  $geometry,
  make_point(
   $x +  "Vel_X_ft_p_s",
   $y +  "Vel_Y_ft_p_s"
   )
  )
 ) / 3

which is saying, in an imaginary way:

"For the current feature, draw a head having a length which is 1/3 of the total length of the line."

You can obviously change the 3 number as you want and apply a similar rule if you want to do the same for the Head thickness parameter (you have just learned how to do it).

Applying the edit on the Head length parameter as above seems to work for me:

enter image description here


An alternative more simple approach would be to use a SVG marker instead of a vector marker field, with just setting the scale and rotation.

SVG Style:

enter image description here

Attribute table:

enter image description here

Map:

enter image description here

If you want the hydrology map with the same arrow line width, this might not suite you, since the entire styled object is scaled.