How can I create a colormap with a different colorscale for positive and negative numbers
Afficher commentaires plus anciens
How can I create a colormap with a different colorscale for positive and negative numbers: positive numbers on a white to red scale, and negative numbers on a white to blue scale (zero being white).
Réponses (3)
Sandro Lecci
le 19 Juin 2018
Modifié(e) : Sandro Lecci
le 19 Juin 2018
Dear Richard,
a colormap is essentially a nx3 matrix with the specification of RGB (3 columns) and the resolution in n lines. You can either create you own "french flag" (I actually did it by myself in some of my scripts),...
% A french-flag with a resolution of 3 would be:
FF = [0 0 1;...
1 1 1;...
1 0 0];
% which becomes:
FF = [0 0 1;...
0.5 0.5 1;...
1 1 1;...
1 0.5 0.5;...
1 0 0];
% by increasing the resolution.
Follow the instruction on how to use the downloaded file and then retreive the colormap as following:
MyMap = brewermap(100, 'RdBu'); %with 100 being the number of steps in your colormap
myMap = flipud(MyMap); %Since you want blue for negative and red for positive values
Hope this helps. Best
10 commentaires
Stephen23
le 19 Juin 2018
Thank you for the link to my FEX submission brewermap. Note that flipud is not required because I wrote brewermap to reverse the colormap sequence when the string token is prefixed with '*', like this:
map = brewermap(100, '*RdBu');
Some other bleu-blanc-rouge colormap submissions that might be of interest:
Richard Walker
le 19 Juin 2018
Sandro Lecci
le 19 Juin 2018
Thank you for specifying this, I must have missed this indication! And thank you also for sharing these colormaps, which I use now by default (I really love the "spectral").
Best,
Sandro Lecci
le 19 Juin 2018
Richard, you should manually change the axis (which function are you using to plot?) such that they lay symmetrically around zero.
Adam
le 19 Juin 2018
If you aren't worried about the numbers on the colourbar you could just scale your negative data up to a maximum of -1 instead of -0.134 by multiplying by 1/0.134
Richard Walker
le 19 Juin 2018
Sandro Lecci
le 19 Juin 2018
Modifié(e) : Sandro Lecci
le 19 Juin 2018
This should do the trick:
set(gca, 'CLim', [-1*max(abs(min), max), max(abs(min), max)]);
change min e max with actual min and max of the data you are plotting
Richard Walker
le 19 Juin 2018
Stephen23
le 19 Juin 2018
@Richard Walker: you could:
- create your own colormap which has the white offcenter, or
- specify the colors explicitly when the data is plotted.
There are infinite possible colormaps so it is clearly not feasible for MATLAB to support them all, but it is easy to define your own to suit your data distribution.
Richard Walker
le 19 Juin 2018
Walter Roberson
le 20 Juin 2018
0 votes
Richard Walker
le 20 Juin 2018
0 votes
Catégories
En savoir plus sur Color and Styling dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!