"How can I ... use 2 colourmaps and have 2 colourbars?"
An axis can have more than 1 colorbar but it cannot have more than 1 colormap. A simple solution is to create a second, invisible axes for the sole purpose of hosting a second colormap while all of your data are plotted on the main, visible axis.
Here's a demo (see inline comments for details). I'm using the quiver function instead of the 3rd party colquiver function you mentioned.
figure()
ax = axes();
ax.Colormap = bone(255);
hold on
[X,Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
h = pcolor(X,Y,Z);
h.EdgeColor = 'none';
ax2 = axes('Visible','off','HandleVisibility','off');
cmap = hot(size(Z,1));
ax2.Colormap = cmap;
[U,V] = gradient(Z,0.2,0.2);
for i = 1:size(Z,1)
quiver(X(i,:),Y(i,:),U(i,:),V(i,:), .2, 'Color', cmap(i,:), 'LineWidth',2)
end
axis equal
xlim([-2,2])
ylim([-2,2])
cb(1) = colorbar(ax);
axPos = ax.OuterPosition;
cb(2) = colorbar(ax2);
cb(2).Position(4) = cb(2).Position(4)*.48;
cb(1).Position(4) = cb(1).Position(4)*.48;
cb(1).Position(2) = sum(cb(2).Position([2,4]))+.04;
cb(2).Position([1,3]) = cb(1).Position([1,3]);
ax.OuterPosition = axPos;
caxis(ax2, [-4,4])
ylabel(cb(1),'pcolor')
ylabel(cb(2),'quiver')
Best Answer