The color indicates the area of ​​the chart background depending on the condition.

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

Example:

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

so that in the barplot ordinary stripes will be displayed, and the background (including the space between the stripes) is colored red behind the columns "3", "5" and "7" (position 2,3,7)

blue example: blue bg graph http://img9.imageshack.us/img9/1478/barkc.jpg

How is this possible?

thank

+3
source share
2 answers

Yes it 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 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')
+4
source

Jonas, :

%# 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')
+3

Source: https://habr.com/ru/post/1753954/


All Articles