Is it possible to create this colormap and corresponding colorbar in Matlab?
14 次查看(过去 30 天)
显示 更早的评论
Hello,
I want to use something like this colorbar on my figure:
Which you can see every 25 by 25 the color has changed. Now I want:
-------------------------------------------------
0-25 = #fff496
25-50 = #fcd70d
50-75= #adff2f
75-100 = #45ff2f
100-125 = #9cb63b
125-150 = #339445
150-175 = #1aa05b
175-200 = #17baa7
200-225 =#159fd0
225-250 = #2f52a4
250 - 275 = #2f449d
275-300 = #4f499f
300-325 = #7550a0
325-350 = #50376d
more than 350 = #2b1d3a
---------------------------------------------
I don't know how to set something like this. Here is my code:
S = shaperead ('country_Boundary.shp');
lon = S.X;
lat = S.Y;
plot(lon, lat, '-k')
hold on
ax = gca;
xL = ax.XLim;
yL = ax.YLim;
rect_x = [-0.25 -0.25 0.25 0.25];
rect_y = [0.25 -0.25 -0.25 0.25];
x = points{:,1};
y = points{:,2};
z = points{:,3};
colorbar
% define start and end colors Using the hex -> rgb converter from this answer: https://www.mathworks.com/matlabcentral/answers/458086-how-to-specify-line-color-using-a-hexadecimal-color-code
start_color = sscanf('00ffff','%2x%2x%2x',[1 3])/255;
end_color = sscanf('0000ff','%2x%2x%2x',[1 3])/255;
num_colors = 100;
% create a map linearly interpolating between them
% i.e. three columns interpolating from Red1 to Red2, etc.
clrs =[linspace(start_color(1),end_color(1),num_colors)' linspace(start_color(2),end_color(2),num_colors)' linspace(start_color(3),end_color(3),num_colors)'];
colormap(clrs)
zlim = [min(z) max(z)]+[-0.1 +0.1];
clr_val = @(z) clrs(ceil(interp1(zlim, [0 1], z)*num_colors), :);
for i=1:numel(x)
p(i) = patch(rect_x + x(i), rect_y + y(i), ...
clr_val(z(i)), ...
'EdgeColor', 'none');
end
ax.XLim = xL;
ax.YLim = yL;
caxis([min(z) max(z)])
I attached my data too. Thank you all.
采纳的回答
Guillaume
2020-5-6
Note that since R2019b, you can write literal hexadecimal (and binary) numbers directly into matlab.
I don't have the mapping toolbox to test with your data, but the following seems to be what you're after:
hexmap = [
0xfff496
0xfcd70d
0xadff2f
0x45ff2f
0x9cb63b
0x339445
0x1aa05b
0x17baa7
0x159fd0
0x2f52a4
0x2f449d
0x4f499f
0x7550a0
0x50376d
0x2b1d3a]; % I used notepad++ in column mode to extract your hex values and append the 0x
cmap = im2double(reshape(typecast(hexmap, 'uint8'), 4, [])'); %convert 32-bit 00RRBBGG hexadecimal into 8-bit quadruplets (GG, RR, BB, 00) then rescale to 0:1
cmap = fliplr(cmap(:, 1:3)); %reorder into R G B triplets.
%demo image just for testing
figure; imagesc(toeplitz(0:400));
%apply colormap with correct scale and display with correct tick marks.
colormap(cmap);
caxis([0 375]); %has to be that to match your spacing
colorbar('Ticks', 0:50:350);
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Orange 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!