Ячейка Matlab в массив не работает - PullRequest
1 голос
/ 26 марта 2012

У меня есть эта ячейка (16x1) в MATLAB:

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 ]

2 голосов
/ 26 марта 2012

Вам не нужно делать cell2mat.Он пытается создать двумерную матрицу символов (что не удается, потому что ваши строки имеют разную длину).

Вам также не нужна строка set(..., потому что xticklabel_rotate уже устанавливает метки.

2 голосов
/ 26 марта 2012

cell2mat в Matlab работает, только если ваша ячейка имеет одинаковое количество столбцов во всех строках. Это так, потому что Matlab не может обрабатывать обычные массивы с переменным числом столбцов в строке, и это, как правило, в случае строковых матриц. Тем не менее, манипуляции с ячейками почти равны манипуляциям с матрицами, единственное отличие заключается в методе индексации: матрицы используют квадратные скобки ([), а ячейки - фигурные скобки.

Я прогуглил код этой функции, которую вы используете, xticklabel_rotate, и нашел ссылку для обмена файлами на функцию здесь . Там в приведенном автором примере вместо матрицы используется ячейка.

Так что я предполагаю, что вы можете сбросить эту cell2mat, потому что я считаю, что вам не нужно устанавливать Xticks с помощью функции set, которую вы используете. xticklabel_rotate должен сделать это.

Я думаю, вы должны попробовать это:

%First bar plotting!
bar(duration_vector);
d = size(duration_vector);
xticklabel_rotate([1:d],45,eventIDs,'interpreter','none');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...