How to add fixed Colorbar based on a vector for 2D scatter plot with 3 vectors

I want to compare two [2D scatter] plots that both have three variables (x,y,z). I'm plotting x against y and showing vector z for both plots by color. I need to make the colorbar fixed so I can compare the two plots. How can I make this colorbar range fixed for both? Thank you in advance
if true
figure
pointsize = 10;
scatter(x1, y1, pointsize, z1)
colorbar;
figure
pointsize = 10;
scatter(x2, y2, pointsize, z2)
colorbar;
end

1 Comment

I have tried using caxis, which I use with the plot command, but it has no effect and the range is set automatically to the full range of my data. I have tried placing the caxis command before, after the specification of colormap and before and after the call to scatter and in all 4 positions. Also tried rebooting computer and repeating the trials.
I did find that caxis only worked with plot if the caxis command was after the colormap and before the plot command. I an using Matlab R2019b Academic with Windows 10 both fully updated. Help please!
Jon. 15 Oct 2020

Sign in to comment.

 Accepted Answer

One option is to normalize the ‘z’ values by scaling them with respect to the range of both ‘z1’ and ‘z2’:
figure
pointsize = 10;
scatter(x1, y1, pointsize, (z1-min([z1(:);z2(:)]))/max([z1(:);z2(:)]))
colorbar;
figure
pointsize = 10;
scatter(x2, y2, pointsize, (z2-min([z1(:);z2(:)]))/max([z1(:);z2(:)]))
colorbar;
The colorbar will be the same for both.

4 Comments

Thanks for your help. I tried it and I still do not see them matching. For example colorbar for 0.5 in figure 1 is not the same in as figure 2. Is there anyway I can keep the original values. My z values are between [2000 and 7000]. Thanks
It will likely be worthwhile to experiment with the caxis (link) function:
figure
pointsize = 10;
scatter(x1, y1, pointsize, z1)
colormap(jet(25))
caxis([0 max([z1(:);z2(:)])])
colorbar;
figure
pointsize = 10;
z2c = (z2-min([z1(:);z2(:)]))/max([z1(:);z2(:)]);
scatter(x2, y2, pointsize, z2)
colormap(jet(25))
caxis([0 max([z1(:);z2(:)])])
colorbar;
Thanks a lot for your help. It worked finally. I just need to find a better way know to see these colors since I have problem with seeing color haha but thanks a lot.

Sign in to comment.

More Answers (0)

Categories

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!