【问题标题】:Error with plotting bar graph with multiple colors绘制具有多种颜色的条形图时出错
【发布时间】:2014-06-17 14:56:40
【问题描述】:

我正在尝试绘制一个简单的条形图,其中包含 8 个条形图,所有偶数条形图采用一种颜色,所有奇数条形图采用不同颜色。以下是我所做的:

info = [mean1 mean2 mean3 mean4 mean5 mean6 mean7 nean8];
sky_blue = [86, 180, 233] / 256;
orange = [230, 159, 0] / 256

for d=1:length(info)
plot_bar(d)=bar(info(1,d), 'BarWidth', 0.5); 
    if mod(d,2)==0
       set(plot_bar(d),'FaceColor', sky_blue);
    else 
       set(plot_bar(d),'FaceColor', orange);
    end
hold on;
end

由于某种原因,条形图是垂直堆叠的,一个在另一个之上。谁能告诉我如何水平分隔条?

另外,我将如何制作一个图例,将天蓝色作为对照组,橙色作为药物组?谢谢!

【问题讨论】:

    标签: matlab plot matlab-figure


    【解决方案1】:

    您可以在没有循环的情况下做到这一点:一次性所有橙色条,然后一次性所有天蓝色条。注意2'BarWidth' 中的附加除法。

    info = [mean1 mean2 mean3 mean4 mean5 mean6 mean7 nean8];
    sky_blue = [86, 180, 233] / 256;
    orange = [230, 159, 0] / 256
    
    bar(1:2:numel(info), info(1:2:end), 'BarWidth', 0.5/2, 'Facecolor', orange);
    hold on
    bar(2:2:numel(info), info(2:2:end), 'BarWidth', 0.5/2, 'Facecolor', sky_blue);
    

    【讨论】:

    • 谢谢你,路易斯。这比我的循环效率高得多。
    【解决方案2】:

    有一个快速的解决方案! 在每次迭代中,您都在绘制一个新的条形图而没有加快其 X 坐标,因此它们都绘制在 X=1

    将您的代码更改为(注意 bar() 函数中的唯一更改):

    info = [mean1 mean2 mean3 mean4 mean5 mean6 mean7 nean8];
    sky_blue = [86, 180, 233] / 256;
    orange = [230, 159, 0] / 256
    
    for d=1:length(info)
    plot_bar(d)=bar(d,info(1,d), 'BarWidth', 0.5); 
        if mod(d,2)==0
           set(plot_bar(d),'FaceColor', sky_blue);
        else 
           set(plot_bar(d),'FaceColor', orange);
        end
    hold on;
    end
    

    输出:

    注意:您可能想使用 XtickLabel 来标记您的地块,这种方法似乎不太适合

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-23
      • 2018-11-06
      • 2015-11-07
      • 2021-02-14
      • 1970-01-01
      • 2020-12-10
      • 2022-07-07
      • 2017-02-07
      相关资源
      最近更新 更多