How to fill a bar plot using an indexed colormap?

20 次查看(过去 30 天)
Hello Community,
I have a plotting problem I cant seem to get the hang of. I have 4 model predictor variables that have been run on the same set of data. This results in the predictor variable (PV) value, and a classification between 1&4 per line. I have run the first PV and graduated the colour of the bar plot as I want (see my other question for plot example). This generates a colormap index called 'barColorMap' which I want to use on the next PV plot, so the line of data in the second plot, is coloured the same as it was in the first plot - even if the PV value changes so the location of the data line in the new plot could move. What I expect, is that the colours of the bar in the first plot are graduated, but in the second PV plot, the coloured bars become mixed or out of sequence.
I have tried a couple of approaches. Firstly:
for b = 1 : numberofbars
% Plot one single bar as a separate bar series.
handleToThisBarSeries(b) = bar(x(b), pltvar2srt(b));
% Apply the color to this bar series.
set(handleToThisBarSeries(b), 'FaceColor', barColorMap(b,:));
hold on;
end
end
and secondly, trying to access the index via handles:
% Define the custom colour order matrix as created in the first plot
% Needs to be be a 3-column matrix (for RGB) with entries in [0,1]
ColOrd = gca;
barColor = ColOrd.barColorMap;
% Determine the number of colors in
% the matrix
[m,n] = size(barColor);
hold on
for b = 1 : numberofbars
% Determine which row to use in the
% Color Order Matrix
ColRow = rem(k,m);
if ColRow == 0
ColRow = m;
end
% Get the color
Col = barColor(ColRow,:);
% Plot the data
bar(x,pltvar2srt,'Color',Col);
hold on;
end
end
and of course, neither works! The plan is to have 4 subplots to enable the comparison of how the different predictor variables behave with the same data.
So, could anyone point me in the direction of some useful information or shed some light on where I am going wrong here please? I would greatly appreciate your help.
Kind regards,
10B.

回答(1 个)

Image Analyst
Image Analyst 2017-5-31
The first code works just fine. Here's proof:
numberOfBars = 7;
pltvar2srt = rand(1, numberOfBars);
x = 1 : numberOfBars;
barColorMap = jet(numberOfBars);
for b = 1 : numberOfBars
% Plot one single bar as a separate bar series.
handleToThisBarSeries(b) = bar(x(b), pltvar2srt(b));
% Apply the color to this bar series.
set(handleToThisBarSeries(b), 'FaceColor', barColorMap(b,:));
hold on;
end
Not sure what you did differently.
  2 个评论
10B
10B 2017-5-31
Hello Image Analyst,
Thanks for dropping by on my question. The code works to produce the bar plot yes, but the problem is that the graduated colour scheme from the first plot, doesn't appear on the second plot - they are all coloured the same (see attached plot).
The 2 plots are the same classified data, that have been run through different predictor variables. What I am trying to do is keep the colouring of each bar the same as it appears in the first plot, irrespective of where it appears in the second plot. So for example, if the data for the bar on the far right of PV1 is coloured yellow, should it be run through PV2 and ends up in the middle, it will still be coloured yellow as in PV1. Sorry if I'm over explaining this - I'm just trying to be clear!
Regards,
10B.
Image Analyst
Image Analyst 2017-5-31
编辑:Image Analyst 2017-5-31
You need to change the b in barColorMap(b,:). It should not be the loop index but an index that you figure out based on the height of your data. Also set 'edgecolor' to 'none'.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Orange 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by