Search code examples
matlabgraphing

Color specifiy area of background of graph depending on condition


I have a bargraph (2D) and I want to make the background red for parts where another vector has a value > 1 i.e.

example:

graph = [2 3 5 4 9 1 7] color = [0 2 2 1 0 1 2]

so the barplot will show usual bars and the background behind (including the space between the bars) is colored red behind the bars of "3","5" and "7" (position 2,3,7)

example with blue color: blue bg graph

Is that somehow possible?

Thanks


Solution

  • Yes, this is possible

    %# define some parameters
    backgroundColor = 'r';
    backgroundWidth = 0.9;
    foregroundWidth = 0.3;
    
    %# collect the data
    graph = [2 3 5 4 9 1 7];
    color = [0 2 2 1 0 1 2];
    
    x = 0:length(graph)-1;
    colIdx = color>1;
    bgBarHeight = max(graph)+1; %# background bars are 1 taller than max
    
    %# first, plot red bars - I plot them as background as in your question, 
    %# not as transparent overlay as in your example (see yuk's answer for that)
    bar(x,colIdx*bgBarHeight,backgroundWidth,'FaceColor',backgroundColor,'EdgeColor','none')
    
    %# use hold on to prevent background from disappearing
    hold on
    
    %# then, plot foreground bars. Use hold on so that the background isn't lost
    bar(x,graph,foregroundWidth,'FaceColor','k')
    
    %# label the axes
    xlabel('X Axis')
    ylabel('Y Axis')