colormap doesn't work with bar plots in 2019a

6 Ansichten (letzte 30 Tage)
Clay Fulcher
Clay Fulcher am 27 Mär. 2020
Bearbeitet: Clay Fulcher am 30 Apr. 2025
I have been changing the colormap in bar charts for decades. It doesn't seem to work now with bar charts in 2019a.
Previously all I had to do to change the colormap in an existing bar chart to copper: colormap copper
Now it does nothing.

Akzeptierte Antwort

Cris LaPierre
Cris LaPierre am 27 Mär. 2020
Not sure if it's changed, but here's an example borrowed from the doc on bar.
y = [1 3 5; 3 2 7; 3 4 2];
b = bar(y,'FaceColor',"flat");
for k = 1:size(y,2)
b(k).CData = k;
end
If I want to use a different colormap, I could do this.
colormap copper
y = [1 3 5; 3 2 7; 3 4 2];
b = bar(y,'FaceColor',"flat");
for k = 1:size(y,2)
b(k).CData = k;
end
  3 Kommentare
KV
KV am 9 Feb. 2024
I discovered this issue too today, working through some legacy code! This solution breaks a lot of older code that was used to produce plots.
Kind of silly and quite a pity now that it'll take a for loop with each bar command to change facecolors....
Clay Fulcher
Clay Fulcher am 30 Apr. 2025
Bearbeitet: Clay Fulcher am 30 Apr. 2025
Cris and KV,
This issue became so annoying that I finally wrote a function to quickly change the colormap of a bar graph. Here it is.
function barcolormap(axesobject,cmap)
%
% This function changes the colormap used with bar graphs.
% USAGE
% barcolormap(axesobject,cmap)
%
% INPUT
% axesobject - the axes object from an existing plot or subplot. Get this
% from the existing axes with axesobject=gca;
% cmap - string containing the chosen colormap. Pre-defined colormaps are:
% parula
% turbo
% hsv
% hot
% cool
% spring
% summer
% autumn
% winter
% gray
% bone
% copper
% pink
% sky (since R2023a)
% abyss (since R2023b)
% jet
% lines
% colorcube
% prism
% flag
% white
%
% EXAMPLE
% bar(rand(6,3));
% axesobject=gca;
% cmap='copper';
% barcolormap(axesobject,cmap); % Change colormap to copper
% barcolormap(axesobject,'winter'); % Change colormap to winter
%
% USAGE
% barcolormap(axesobject,cmap)
%
h=axesobject;
set(h,'colormap',eval(cmap))
hbar=get(h,'children');
Lbar=length(hbar);
for i=1:Lbar
set(hbar(i),'FaceColor','flat');
hbar(i).CData=i;
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Color and Styling finden Sie in Help Center und File Exchange

Produkte


Version

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by