![0000 Screenshot.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/203404/0000%20Screenshot.png)
How to crate a two direction colorbar?
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Image Analyst
le 9 Fév 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);
![0000 Screenshot.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/203404/0000%20Screenshot.png)
3 commentaires
Image Analyst
le 9 Fév 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);
![0000 Screenshot.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/203408/0000%20Screenshot.png)
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Colormaps dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!