Matlab单元到阵列不工作

Matlab单元到阵列不工作,matlab,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,

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

Matlab中的cell2mat仅在单元格的所有行中的列数一致时才起作用。这是因为Matlab无法处理每行列数可变的普通数组,而字符串矩阵通常就是这种情况。 也就是说,单元格操作几乎等同于矩阵操作,唯一的区别是指数化方法:矩阵使用方括号[而单元格使用方括号]

我在谷歌上搜索了你正在使用的函数xticklabel_rotate的代码,找到了该函数的fileexchange链接。在这里,作者给出的示例使用了一个单元格,而不是一个矩阵

所以我猜你可以放下这个cell2mat,因为我认为你不需要用你正在使用的set函数来设置xtick。xticklabel_旋转应该可以做到这一点

我想你应该试试这个:

%First bar plotting!
bar(duration_vector);
d = size(duration_vector);
xticklabel_rotate([1:d],45,eventIDs,'interpreter','none');

Matlab中的cell2mat只有在所有行中的列数一致的情况下才有效。这是因为Matlab无法处理每行列数可变的普通数组,而这通常是字符串矩阵的情况。 也就是说,单元格操作几乎等同于矩阵操作,唯一的区别是指数化方法:矩阵使用方括号[而单元格使用方括号]

我在谷歌上搜索了你正在使用的函数xticklabel_rotate的代码,找到了该函数的fileexchange链接。在这里,作者给出的示例使用了一个单元格,而不是一个矩阵

所以我猜你可以放下这个cell2mat,因为我认为你不需要用你正在使用的set函数来设置xtick。xticklabel_旋转应该可以做到这一点

我想你应该试试这个:

%First bar plotting!
bar(duration_vector);
d = size(duration_vector);
xticklabel_rotate([1:d],45,eventIDs,'interpreter','none');
您不需要执行cell2mat。这会尝试创建一个2D字符矩阵,但由于字符串长度不同而失败

您也不需要set…行,因为xticklabel_rotate已经设置了标签。

您不需要执行cell2mat。这会尝试创建一个二维字符矩阵,但由于字符串长度不同而失败


您也不需要set…行,因为xticklabel_rotate已经设置了标签。

我忘记删除我要删除的两行:p,基本上只需删除set和cell2mat,它就可以工作了。我得到了以下信息:???对于“cell”类型的输入参数,未定义函数或方法“xticklabel_rotate”。错误==>extract\u data在53时,旋转[1:d],45,eventIDs,'explorer','none';输入我在答案上发布的链接,在那里下载代码,将其放在您的工作目录中,如果它抱怨没有为Celly类型的输入参数定义函数,请尝试一下。我忘了删除我要删除的两行:p,基本上只需删除set和cell2mat,它应该可以工作很抱歉,我收到以下消息:???未定义函数或方法“xticklabel_rotate”,用于类型为“cell”的输入参数。错误==>extract_data at 53 xticklabel_rotate[1:d],45,EventID,'解释器','none';输入我在答案上发布的链接,在那里下载代码,将其放在您的工作目录中,如果它抱怨没有为cell类型的输入参数定义函数,请尝试一下。我得到以下信息:???对于cell类型的输入参数,未定义函数或方法“xticklabel_rotate”。错误==>在53 xticklabel_旋转[1:d]处提取_数据、45、EventID、‘解释器’、‘无’;xticklabel_rotate.m文件需要在您的Matlab搜索路径中。最简单的方法是将其放入工作所在的目录中,或将其位置添加到路径中。我得到以下结果:???未定义函数或方法‘xticklabel_rotate’,用于类型为‘cell’的输入参数。错误==>在53 xticklabel_rotate处提取数据[1:d]、45、eventIDs、‘解释器’、‘无’;xticklabel_rotate.m文件需要位于Matlab搜索路径中。最简单的方法是将其放入工作所在的目录中,或将其位置添加到路径中。