MATLAB Answers

0

How do I bind a specific value to a color using colormap?

Asked by Denis Perotto on 15 Jan 2019
Latest activity Answered by Walter Roberson
on 16 Jan 2019
I'm plotting a 2D contour plot using contourf(X, Y, Z). How can I create a custom colormap, where certain color would be bound to a curtain value? For example:
100 - [1 0 0]
200 - [1 0.5 0]
1000 - [1 1 0]
It would be also nice to make all values below 100, for example, [0.5 0 0] and all values above 1000 - [1 1 0.5].
Please, do not suggest colormap editor. If this task is impossible for colormap, suggest me another function for 2D plots (maybe, plot it dot by dot)

  2 Comments

To confirm: if the input value were 100*(1+eps) then the output should be transparent because the value would not be any of the ones you listed?
I meant non-even intervals:
-inf ... 100 - [0.5 0 0]
100-200 - [1 0 0]
200-1000 - [1 0.5 0]
1000 ... inf - [1 1 0]

Sign in to comment.

Products


Release

R2018b

2 Answers


Answer by KSSV
on 15 Jan 2019

  1 Comment

Tricky, but not acceptable for me.
First, there is a need to see real, not modified, data at any point on a contour, when I move my mouse on that point.
Second, I anyway get an even distribution of colors, which I cannot control. I created a custom colormap of 8 colors and set up 8 intervals. But the cycle, which modifies data, sets all the values to the maximum, and I miss 1 color anyway. I tried to program it like this:
crange = [0 TS-(TL-TS) TS-0.5*(TL-TS) TS TS+0.25*(TL-TS) TS+0.5*(TL-TS) ...
TS+0.75*(TL-TS) TL max(max(Z))+0.01]';
crange(1:size(crange, 1)-1, 2) = crange(2:size(crange, 1), 1);
crange = crange(1:size(crange, 1)-1,:);
cmap = [0 0 1;
0 0.5 1;
0 1 1;
1 0 0;
1 0.4 0;
1 0.6 0;
1 0.8 0;
1 1 0];
colors = zeros(size(Z));
for c = 1:size(crange, 1)
for i = 1:size(Z, 1)
for j = 1:size(Z, 2)
if Z(i, j) >= crange(c, 1) && Z(i, j) < crange(c, 2)
colors(i, j) = crange(c, 2);
end
end
end
end
contourf(X, Y, colors);
colormap(cmap);
colorbar

Sign in to comment.