File Exchange

image thumbnail


version 1.8 (14.5 KB) by

Generates a quiver plot colored according to vector magnitude and/or user specified axis boundaries.



View License

quiverwcolorbar adds functionality to the original quiver function by assigning color to the arrows according to the vector magnitude. The corresponding colorbar spans the minimum and maximum values of the dataset or can be specified by the user. Any changes to the colorbar boundaries change the vector colors accordingly.
      quiverwcolorbar(x,y,u,v,scale,'bounds',[colormin colormax])

      x, y: Vector locations
      u, v: Vector directions (East-West, North-South)
      scale: Scalar value to set vector lengths
      'bounds': Optional setting to specify colorbar axis minimum and maximum values

      x = rand(1,50).*100;
      y = rand(1,50).*100;
      u = rand(1,50) .* 10;
      v = rand(1,50) .* 10;
      scale = 0;
      figure; quiverwcolorbar(x',y',u',v',scale); %compare to:
      figure; quiverwcolorbar(x',y',u',v',scale,'bounds',[0 10]);

Comments and Ratings (13)

Thank you for your useful script. I use it a lot in my work. But recently I realized that quiverwcolorbar rotate my domain somehow. Actually, because I use it to plot vectors at a duct cross section and I do average over the whole domain I did not notice this effect. I mean if I plot vector field with the same data by quiver and quiverwcolorbar I have two different results. could you please tell me what to do about that?

Melissa Day

Lio - I don't currently have Matlab access but I expect if you edit the line that says "cmap = jet(64); %toggle type of colormap" to something like cool(64) this might fix your issue.

Hello dear Melissa!

I wanted to ask if you could change the code to make the function able to use a user-defined colormap.
Right now there is a "bug", as only the colorbar itself takes over the colormap setting, while the vectors weirdly stay monochromic.

colormap cool

will give you a figure with a cool colorbar ranging from blue to violet, but the vectors will all be blue (despite different sizes).

I believe that this problem isn't linked to my particular case, as the function works very well if I don't specify a colormap.

Thanks so much!


weidos (view profile)

I finished my work with this code ,appreciate to your share .

Melissa Day

Ah, the scale factor doesn't work because I added variables. If you put in at line ~99 (also I will update the file):

if(nin == 3) % quiver(u,v,s)
        scale = varargin{nin};
elseif(nin >= 5) % quiver(x,y,u,v,s) or quiver(x,y,u,v,s,'bounds',[start end])
        scale = varargin{5};

you will be able to use a fractional scale like 0.5 or something and make your arrows smaller. You can also play around with alpha, beta, autoscale, and plotarrows to change the appearance of the arrows.

Oh yejin

Thank you for good function.
But I want to change the quiver size. It`s too large for me to ploting. What should I do?


Simon (view profile)

In Matlab 2014a this gives me an error:

Error using set
Bad property value found.
Object Name: axes
Property Name: 'CLim'
Values must be increasing and non-NaN.

Error in caxis (line 79)

Error in quiverwcolorbar (line 185)
caxis([colormin colormax])

It seems to be fixed by adding transposes to line 114, so that line 114 should read:

xyuvvrNN = [x(nonNaNind)',y(nonNaNind)',u(nonNaNind)',v(nonNaNind)',vr(nonNaNind)'];


sundar (view profile)

Thanks for the quick reply.
I just figured out that when I use imagesc instead of imshow it works fine.

hold on

This works good.

Melissa Day

sundar, I'm not familiar with imshow, but the velocity coloring and the colorbar are not linked in this program quite like they are normally, which might be an issue. When I use imshow(quiverwcolormap(x',y',u',v',scale,'bounds',[0 10]),jet) with the data from the example I posted, it looks all right though, but that might not be your problem. Normally when I call this program to plot over another image I just use "hold on". Sorry I can't be of more help - I hope you figure it out!


sundar (view profile)

When I use quiverwcolorbar, I get a very nice colored velocity field from blue to red, using the jet colormap. My velocity range is between 0 and 13 um/min.
When I use imshow to display my image and then call this function, the colorbar is totally weird and it is only blue in color (ranging from 0 to 13 um/min) even though the velocities are colored blue to red.

I do not know what I should change?

Any help will be awesome.

Melissa Day

FYI to everyone, I had a similar problem with and had to add "view([0,-90]);" after I called the plot for it to look right (after doing a clear all), so if anyone is having trouble with this maybe playing with the view will help.

Travis Miles

For some reason this is flipping my y-axis and image from increasing to decreasing...



Fixed so scale can be used to change arrow size


Minor typo fixes


Fixed some typos, added bit in case min(xyuvvrNNs) < colormin


changed spacing in description


Fixed some typos, added bit in case min(xyuvvrNNs) < colormin



MATLAB Release
MATLAB 7.8 (R2009a)

Inspired by: Quiverc, vfield_color, quiverc2wcmap, quiver2.m v1.2 (Nov 2009)

Inspired: quivermc

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video