Диаграмма Matlab категориальных данных оси X и массива ячеек - PullRequest
1 голос
/ 31 марта 2020

У меня есть массив ячеек с вложенными массивами ячеек: enter image description here

Я хочу построить каждый вложенный массив ячеек по строкам. Но не все вложенные ячейки имеют размер 8x1. Мне нужно заполнить значения empy как NaN или нули, но все еще иметь возможность непрерывно отображать данные.

пример для столбцов 7-9:

Column7   Column8   Column9
1          1           1                       
2          2           2                        
3        NaN          NaN
4        NaN          NaN
5        NaN          NaN
6        NaN          NaN

Я хочу построить строки, строка 1 - (1,1,1), строка 2 - (2,2,2), строка 3 - (3, NaN, NaN) и т. д .; Таким образом, категория 7 будет иметь значения 1-6 по вертикали. Категория 8 будет иметь значения от 1 до NaN по вертикали, но только при построении значений 1 и 2.

Я хочу, чтобы значения строки 1 соединялись через линию:

Пример:

figure
hold on
cellfun(@(C1) plot(cell2mat(C1,:), 'o-'), C);
% setup axes
xlim([0, 15]);
ax = gca;
ax.XTick = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
ax.XTickLabel = {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15'};

1 Ответ

1 голос
/ 31 марта 2020

Самый простой способ сделать это - построить 2D-матрицу, которая содержит ваши данные (если они есть) и NaN в других местах. Большинство команд построения графиков в Matlab игнорируют NaN.

Чтобы преобразовать массив ячеек в матрицу, вы можете создать матрицу, содержащую только NaN, и заполнять данные столбцом за столбцом. Например;

% Create dummy data
C = {[1;2;3;4], [7;7;8], [5;4]};
% Find the maximum number of rows possible across all cells
Nrows = max(cellfun(@length, C));
% Create matrix full of NaNs
M = nan(Nrows, length(C));
% Loop cells
for i = 1 : length(C)
    % Pull the contents of this cell
    Content = C{i};    
    % Fill this column with as many rows as we found
    M(1 : length(Content), i) = Content;
end

Полученная матрица M содержит значения каждой ячейки в C, по одному на столбец. Затем вы можете просто построить их с помощью

plot(M)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...