Matlab单元格无法正常工作

时间:2012-03-26 19:11:39

标签: matlab

我在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);

2 个答案:

答案 0 :(得分:2)

只有当您的单元格在所有行中具有一致的列数时,Matlab中的

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已经设置了标签。

相关问题