【问题标题】:Color specifiy area of background of graph depending on condition根据条件为图形背景的特定区域着色
【发布时间】:2010-07-09 21:48:51
【问题描述】:

我有一个条形图 (2D),我想将另一个向量的值 > 1 的部分的背景设为红色,即

示例:

图 = [2 3 5 4 9 1 7] 颜色 = [0 2 2 1 0 1 2]

因此条形图将显示通常的条形图,并且后面的背景(包括条形之间的空间)在“3”、“5”和“7”(位置 2、3、7)的条形后面被涂成红色

蓝色示例:

这有可能吗?

谢谢

【问题讨论】:

  • 示例图片链接似乎不起作用。

标签: matlab graphing


【解决方案1】:

是的,这是可能的

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

【讨论】:

    【解决方案2】:

    稍微修改 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')
    

    【讨论】:

    • 非常感谢您的回答,我只能接受一个,所以我会接受第一个。我对两个答案都投了 1 票。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2022-01-10
    相关资源
    最近更新 更多