【问题标题】:How can I plot a one-bar stacked bar chart in MATLAB?如何在 MATLAB 中绘制单条堆积条形图?
【发布时间】:2020-05-27 05:10:55
【问题描述】:

如果我这样做

bar([1 2 3 4 5;2 3 4 5 1], 'stacked')

我得到了与我的两行数据相对应的两条堆叠值 - 正如我所料:

我希望能够类似地绘制一个只有一个条形的堆叠条形图,但如果我尝试这样

bar([1 2 3 4 5], 'stacked')

我只是得到了五个单独的条 - 没有堆叠:

那么如何制作单条堆叠条形图?

【问题讨论】:

    标签: matlab bar-chart matlab-figure


    【解决方案1】:

    (此解决方案需要 MATLAB 2019b)

    引用文档:

    bar(y) 为 y 中的每个元素创建一个条形图。如果 y 是一个 m×n 矩阵,则 bar 创建 m 个包含 n 个条形的组。

    bar(x,y) 在 x 指定的位置绘制条形。

    使用第一种语法,向量的每个元素都将成为它自己的条。使用第二种语法,x 定义了如何理解向量。在您的情况下,您需要一个堆叠组:

    bar(1,[1 2 3 4 5], 'stacked')
    

    为了比较,与Y=rand(1,5)

    【讨论】:

    • 这适用于 R2019b;不在 R2017b 中。所以它似乎是最近添加的
    • 2017b 发生了什么?总是右边的情节?
    • 语法bar(1,[1 2 3 4 5], 'stacked') 不被接受。它给出了一个错误X must be same length as Y
    • 我今天在 R2019a 上测试过,bar(1, [1 2 3 4 5], 'stacked') 也不被接受。所以这是 R2019b 的补充
    【解决方案2】:

    Daniel's 答案是可行的方法,但它仅适用于最新的 Matlab 版本,从 R2019b 开始。

    Ander's hacky 解决方案通过创建第二个不可见的条来工作。这有副作用;例如axis auto 将扩展轴。

    以下是避免这些问题的一种更巧妙的方法。它创建两个条形图,然后通过更改图形对象的数据删除第二个条形图:

    values = [1 2 3 4 5]; 
    h = bar([values(:).'; NaN(1, numel(values))], 'stacked');
    XData = vertcat(h.XData);
    XData = num2cell(XData(:,1));
    [h.XData] = XData{:};
    YData = vertcat(h.YData);
    YData = num2cell(YData(:,1));
    [h.YData] = YData{:};
    

    【讨论】:

      【解决方案3】:

      似乎没有直接的解决方案!这可能会有所帮助:

      bar([1,2,3,4,5,6,7,8,9,10,11,12,13; nan(1,13)], 'Stacked');
      set(gca,'xtick',1,'xlim',[0.25 1.75]);
      

      [https://www.mathworks.com/matlabcentral/answers/295950-how-can-i-get-a-stacked-bar-graph-with-a-single-bar]

      【讨论】:

        【解决方案4】:

        黑客解决方案:

        bar([1 2 3 4 5;0 0 0 0 0], 'stacked')
        set(gca,'xlim',[0.25 1.75])
        

        【讨论】:

          猜你喜欢
          • 2018-06-05
          • 2012-09-17
          • 2021-12-27
          • 2021-12-13
          • 1970-01-01
          • 2011-09-18
          • 2016-05-24
          相关资源
          最近更新 更多