2010-07-09 2 views
3

У меня есть гистограмма (2D), и я хочу, чтобы сделать красный фон для частей, где другой вектор имеет значение> 1 т.е.Цвета specifiy области фона графика в зависимости от состояния

пример:

график = [2 3 5 4 9 1 7] color = [0 2 2 1 0 1 2]

так, чтобы штрих-план показывал обычные полосы, а задний фон (включая промежуток между полосками) окрашивался в красный цвет позади стержни «3», «5» и «7» (позиция 2,3,7)

пример с синим цветом: blue bg graph http://img9.imageshack.us/img9/1478/barkc.jpg

Это возможно?

Благодаря

+0

Ссылка Пример изображения не кажется работать. –

ответ

4

Да, это возможно

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

Немного измененный код 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') 
+0

Большое спасибо за ваши ответы, я могу принять только один, поэтому я согласен с первым. Я проголосовал за оба ответа 1 вверх. Еще раз спасибо! – ShoX

Смежные вопросы