Filter löschen
Filter löschen

How can I create a colormap with a different colorscale for positive and negative numbers

40 Ansichten (letzte 30 Tage)
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).

Antworten (3)

Sandro Lecci
Sandro Lecci am 19 Jun. 2018
Bearbeitet: Sandro Lecci am 19 Jun. 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.
..or download some very nice colormaps like these ones . The one you are looking for is RdBu.
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 Kommentare
Stephen23
Stephen23 am 19 Jun. 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
Richard Walker am 19 Jun. 2018
Thanks Stephen, "specify the colors explicitly when the data is plotted." sounds like a good solution, but even after searching I can't see how contourf or any other command will do it. I would be grateful for a tip on how to do it.

Melden Sie sich an, um zu kommentieren.


Walter Roberson
Walter Roberson am 20 Jun. 2018

Richard Walker
Richard Walker am 20 Jun. 2018
Thank you Walter. I am sure it must be possible using cptcmap, it looks very powerful, but therefore also rather complex. I got the example in the link you sent to work, but I can't immediately see how to change the scales to what I want .. I am sure there must be a simpler way using basic MATLAB commands, but as a non-expert it's not that simple to penetrate the documentation.

Community Treasure Hunt

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

Start Hunting!

Translated by