棒グラフ(2D)があり、別のベクトルの値が1より大きい部分の背景を赤にしたい。
例:
グラフ=[23 5 4 917]色=[02 2 1 0 1 2]
したがって、棒グラフには通常の棒が表示され、後ろの背景(棒の間のスペースを含む)は「3」、「5」、「7」の棒の後ろに赤で表示されます(位置2、3、7)。
それはどういうわけか可能ですか?
ありがとう
はい、これは可能です
%# 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コードを少し変更しました。
%# 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')