在MATLAB中创建一个“时间轴”风格的图形

6
在MATLAB中进行一些数据处理后,我希望创建一个图表,显示一系列数据的彩色时间线条。我有许多进程,每个进程都经历类似的步骤,并在不同的时间开始和停止。理想情况下,它应该看起来像这样(原谅ASCII艺术):
| ###***$$$$$$$$$$ 进程1 | ###***$$$$$$$ 进程2 | ###$$$$$ 进程3 | *******$$$$$$ 进程4 +------------------------------------------ 时间
其中 # *$ 代表相邻块的不同颜色(每个进程经过的步骤中的一种颜色;请注意,有些是可选的)。
标签可以放在其他地方,但靠近每条线是很好的。
我已经使用rectangletext拼凑出了一个解决方案,但似乎这可能是MATLAB中已经存在的一种类型的图表,我只是还没有找到。你知道吗?
1个回答

9
使用 barh。将第一列设置为您的初始处理时间。
data_with_init_time = [ 
       1, 10, 5, 3 ;
       3, 10, 3, 9 ;
       7, 10, 4, 8 ;
       12,10, 2, 2 ];

h = barh(data_with_init_time, 'stack');
set(h(1), 'facecolor', 'none', 'EdgeColor', 'none'); % disable the color of the first column (init time)
set(gca, 'YTickLabel', {'proc 1', 'proc 2', 'proc 3', 'proc 4'} ); % change the y axis tick to your name of the process
axis ij; % Put the first row at top

1
+1:非常好,虽然我可能会做一个小修改。轴的背景颜色通常默认为白色,但以防万一不是这样,您可以使用以下代码:axesColor = get(gca,'Color'); set(h(1),'FaceColor',axesColor,'EdgeColor',axesColor); - gnovice
2
@gnovice:你可以简单地将颜色设置为'none' - Amro
@Amro:啊,是的。我完全忘记了这对条形图有效。那是一个更好的选择。 - gnovice
谢谢大家的建议。你们的评论已经被整合到答案中了。我刚刚发现 'axis ij' 可以按照首选顺序呈现数据。 - YYC
@YYC:如果你想匹配OP的ASCII艺术,你也可以添加 set(gca,'YAxisLocation','right') - Amro
2
刚刚想到,你可以使用 set(h(1), 'Visible','off') 而不是使用 'none' 颜色,特别是如果你想让第一个系列与当前颜色映射中的第一个颜色匹配,根据 ColorOrder 属性(否则它会跳过第一个)。 - Amro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接