views:

46

answers:

2

Hi,

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

+3  A: 

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')
Jonas
+1  A: 

A little modified Jonas code to make background bars transparent and correct some errors:

%# define some parameters
foregroundColor = 'k';
backgroundColor = 'r';
foregroundWidth = 0.3;
backgroundWidth = 0.9;

%# 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 foreground bars
b1 = bar(x,graph,foregroundWidth,'FaceColor',foregroundColor);
hold on
%# then, plot background bars. 
%# they will overlap foreground bars, but we'll make them transparent later
b2 = bar(x,colIdx*bgBarHeight,backgroundWidth,'FaceColor',backgroundColor,'EdgeColor','none');
hold off

%# make background bars transparent
pch = get(b2,'child'); %# get patch objects from barseries object
set(pch,'FaceAlpha',0.3); %# set transparency

xlabel('X Axis')
ylabel('Y Axis')
yuk
Thanks a lot for your answers, I can only accept one, so I will accept the first one.I voted both answers 1 up.Thanks again!
ShoX

related questions