create specific color map and save it
显示 更早的评论
how do i create my own color map for 2D-scatter plot.
such that all the values of z
- z <= 10 ------- take green color
- 10 < z <= 25 ----- yellow color
- 25 < z <= 50 ----- orange color
- z > 50 ----- red color
i want to create a color map obeying such condition and save it , so that i can use with whatever z i obtain in future.
as an example i have attached x,y,z
scatter(x,y,[],z,'filled','o')
1 个评论
Same question you have asked multiple times...
采纳的回答
Try this
val_z = (10:51).';
idx = 1*(val_z<=10) + ...
2*((10<val_z) & (val_z<=25)) + ...
3*((25<val_z) & (val_z<=50)) + ...
4*(val_z>50);
colors = [0 1 0; % green
1 1 0; % yellow
1 0.5 0; % orange
1 0 0]; % red
cmap = colors(idx, :);
scatter(x,y,[],z,'filled','o')
colormap(cmap)
set(gca, 'CLim', [10 51]);
12 个评论
as i am new to this concept,can you please explain me the above code.
This uses basic indexing operations available in MATLAB. It is difficult to summarize everything in one comment. I suggest running this code line by line and see the output of each step. Also, read about the indexing from the following links
First of al thank you for your help.
i am getting the colors according to my conditions.
but my color bar is showing up weird.

why is orange color repeating itself to the position of its value. and why don't green and yellow show up in color bar.
Additionally ,what should to i do to have increase in the darkness of color as value increases.( for example value > 50 we have red color, how can we acheive such that 51 has light red compared to 55 which should again be light red compared 60 and so on, my max value should be dark red)
Try this
val_z = (10:max(z)).';
cmap = zeros(numel(val_z), 3);
mask = val_z<=10;
cmap(mask, :) = repmat([0 1 0], sum(mask), 1); % green
mask = (10<val_z) & (val_z<=25);
cmap(mask, :) = repmat([1 1 0], sum(mask), 1); % yellow
mask = (25<val_z) & (val_z<=50);
cmap(mask, :) = repmat([1 0.5 0], sum(mask), 1); % orange
mask = val_z>50;
n = sum(mask);
t = linspace(0, 1, n).';
red = [1 0 0];
dark_red = [0.3 0 0];
cmap(mask, :) = (1-t).*red + t.*dark_red;
scatter(x,y,[],z,'filled','o')
set(gca, 'CLim', [10 max(z)]);
colormap(cmap)
colorbar

I am getting this error
Which MATLAB version are you using?
You can try this
val_z = (10:max(z)).';
cmap = zeros(numel(val_z), 3);
mask = val_z<=10;
cmap(mask, :) = repmat([0 1 0], sum(mask), 1); % green
mask = (10<val_z) & (val_z<=25);
cmap(mask, :) = repmat([1 1 0], sum(mask), 1); % yellow
mask = (25<val_z) & (val_z<=50);
cmap(mask, :) = repmat([1 0.5 0], sum(mask), 1); % orange
mask = val_z>50;
n = sum(mask);
t = linspace(0, 1, n).';
red = [1 0 0];
dark_red = [0.3 0 0];
cmap(mask, :) = interp1([0 1], [red; dark_red], t);
scatter(x,y,[],z,'filled','o')
set(gca, 'CLim', [10 max(z)]);
colormap(cmap)
colorbar

again my colorbar shows green at higher values whereas it should have been limited to trange 0-10
There seems to be some difference in the working of colormap in R2013b. In R2020a, it looks fine

yeah color ranges are ok ,only colorbar gets repeated after certain interval.
do you have any idea why this may be.
thank you for your help .
much appreciated
I don't have any idea about this. Maybe something is mentioned in archived documentation, but the reason is not obvious.
更多回答(0 个)
类别
在 帮助中心 和 File Exchange 中查找有关 Blue 的更多信息
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
