How to crate a two direction colorbar?
7 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
MichailM
am 9 Feb. 2019
Kommentiert: MichailM
am 9 Feb. 2019
Hi,
I am using scatter to generate a 2-D plot. My y-axis values range between, let's say, ylim([-100 100]). The direction of the colorbar, in the jet color scale, will be "dark blue" for -100 up to "dark red" for 100. Is there any way I can have a double direction colorbar centered around zero? For instance, 0 will be the "dark blue", while -100 and 100 will be the "dark red". Of course the colors inbetween will correspond to the values between [0 100] and [-100 0].
0 Kommentare
Akzeptierte Antwort
Image Analyst
am 9 Feb. 2019
Sure. Try this:
numPoints = 500;
y = -100 + 200 * rand(1, numPoints);
x = 10 * rand(1, numPoints);
% Assign colors
cm = [flipud(jet(128)); jet(128)];
% Make 200 long.
cm = imresize(cm, [200, 3]);
markerColors = zeros(length(y), 3);
for k = 1 : length(y)
thisValue = round(y(k) + 100);
if thisValue < 1
thisValue = 1;
elseif thisValue > size(cm, 1)
thisValue = size(cm, 1);
end
markerColors(k, :) = cm(thisValue, :);
end
scatter(x, y, 35, markerColors, 'filled');
% Put a line at the x axis
grid on;
line(xlim, [0, 0], 'Color', 'k', 'LineWidth', 2);
3 Kommentare
Image Analyst
am 9 Feb. 2019
Try adding the colormap and colorbar commands:
numPoints = 500;
y = -100 + 200 * rand(1, numPoints);
x = 40 * rand(1, numPoints);
% Assign colors
cm = [flipud(jet(128)); jet(128)];
% Make 200 long.
cm = imresize(cm, [200, 3]);
cm(cm>1) = 1;
cm(cm<0) = 0;
markerColors = zeros(length(y), 3);
for k = 1 : length(y)
thisValue = round(y(k) + 100);
if thisValue < 1
thisValue = 1;
elseif thisValue > size(cm, 1)
thisValue = size(cm, 1);
end
markerColors(k, :) = cm(thisValue, :);
end
scatter(x, y, 35, markerColors, 'filled');
% Put a line at the x axis
grid on;
line(xlim, [0, 0], 'Color', 'k', 'LineWidth', 2);
colormap(cm);
numTicks = 21;
tickNumbers = linspace(0, 1, numTicks)
for k = 1 : numTicks
tickLabels{k} = sprintf('%.1f', -100 + 200 *tickNumbers(k));
end
colorbar('Ticks', tickNumbers, 'TickLabels', tickLabels);
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Orange finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!