在Matlab 2016b

时间:2018-03-11 19:58:09

标签: matlab plot

我将数据组织为这样的结构,

enter image description here

我想要或多或少地绘制一个类似于条形图的图表: enter image description here

即,每个栏是: - 根据'类型'进行颜色编码 - 由'持续时间'表示的宽(x轴单位) - 由'avg'

表示为高(y轴)

我尝试使用'bar'功能,但是因为它不允许设置单个条的宽度,只允许同时设置所有条的宽度。

有人能提出一种在matlab中实现这个情节的方法吗?谢谢!

1 个答案:

答案 0 :(得分:2)

我认为这应该产生你想要的东西:

C = {
    0   1   0       'M';
   11   3   3.667   'o';
   21   3   7       'm';
   15   5   3       'M'
};

T = cell2table(C,'VariableNames',{'Total' 'Duration' 'Average' 'Type'});

figure();
hold on;

off = 0;

for i = 1:height(T)
    dur = T.Duration(i);
    avg = T.Average(i);

    switch (T.Type{i})
        case 'M'
            col = [1.0 0.0 0.0];
        case 'm'
            col = [0.0 1.0 0.0];
        case 'o'
            col = [0.0 0.0 1.0];
        otherwise
            col = [1.0 1.0 1.0];
    end

    rectangle('Position',[off 0 dur avg],'FaceColor',col);
    off = off + dur;
end

h = zeros(3,1);
h(1) = area(NaN,'FaceColor',[1.0 0.0 0.0]);
h(2) = area(NaN,'FaceColor',[0.0 1.0 0.0]);
h(3) = area(NaN,'FaceColor',[0.0 0.0 1.0]);
legend(h,'M','m','o');

hold off;

Output

我基本上使用rectangle function来绘制轴上的连续矩形,并利用其FaceColor参数来实现基于类型的着色。对于传说中的问题,我使用虚拟区域图创建了一个假的区域图,用于每种独特的类型及其各自的颜色。

在我的示例中,我使用表来处理示例数据,但迭代结构数组几乎是相同的。调整轴刻度或颜色以满足您的需求应该不难,但如果您有疑问,请随时询问。