我将数据组织为这样的结构,
即,每个栏是: - 根据'类型'进行颜色编码 - 由'持续时间'表示的宽(x轴单位) - 由'avg'
表示为高(y轴)我尝试使用'bar'功能,但是因为它不允许设置单个条的宽度,只允许同时设置所有条的宽度。
有人能提出一种在matlab中实现这个情节的方法吗?谢谢!
答案 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;
我基本上使用rectangle function来绘制轴上的连续矩形,并利用其FaceColor
参数来实现基于类型的着色。对于传说中的问题,我使用虚拟区域图创建了一个假的区域图,用于每种独特的类型及其各自的颜色。
在我的示例中,我使用表来处理示例数据,但迭代结构数组几乎是相同的。调整轴刻度或颜色以满足您的需求应该不难,但如果您有疑问,请随时询问。