我在MATLAB中有这个单元格(16x1):
eventIDs =
'explosion'
'light'
'darkness'
'atomic'
...
..
现在我想用这个:
%First bar plotting!
bar(duration_vector);
d = size(duration_vector);
labels = cell2mat(eventIDs);
xticklabel_rotate([1:d],45,eventIDs,'interpreter','none');
set(gca, 'XTick', 1:d, 'XTickLabel', labels);
我想绘制条形图,但我的事件太长了,我希望它们旋转看起来很棒!
但是当我运行代码时 我明白了:
??? Error using ==> cat
CAT arguments dimensions are not consistent.
Error in ==> cell2mat at 85
m{n} = cat(1,c{:,n});
Error in ==> extract_data at 52
labels = cell2mat(eventIDs);
答案 0 :(得分:2)
cell2mat才有效。这是因为Matlab无法处理每行可变列数的普通数组,而这通常是字符串矩阵的情况。 也就是说,单元格操作几乎等于矩阵操作,唯一的区别是索引方法:矩阵使用方括号([),单元格使用大括号。
我用google搜索了你正在使用的这个函数的代码,xticklabel_rotate,并找到了函数here的fileexchange链接。在那里,作者给出的例子使用了一个单元格,而不是一个矩阵。
所以我猜你可以放弃cell2mat
,因为我不需要用你正在使用的set
函数设置Xticks。 xticklabel_rotate
应该这样做。
我想你应该试试这个:
%First bar plotting!
bar(duration_vector);
d = size(duration_vector);
xticklabel_rotate([1:d],45,eventIDs,'interpreter','none');
答案 1 :(得分:2)
您无需执行cell2mat
。这会尝试创建一个2D字符矩阵(因为你的字符串长度不同而失败)。
您也不需要set(...
行,因为xticklabel_rotate
已经设置了标签。