Tengo una matriz de células con células matrices anidadas:
Quiero trazar cada matriz celular anidada por filas. Sin embargo, no todas las células matrices anidadas son 8x1. Es necesario llenar en los valores de vaciar como NaN o ceros, pero aún así ser capaz de representar los datos de forma continua.
ejemplo para columnas 7-9:
Column7 Column8 Column9
1 1 1
2 2 2
3 NaN NaN
4 NaN NaN
5 NaN NaN
6 NaN NaN
Quiero trazar por filas, la fila 1 es (1,1,1), fila 2 es (2,2,2), fila 3 es (3, NaN, NaN), y así sucesivamente; Así categoría 7 tendrá valores 1-6 verticalmente. Categoría 8 tendrá valores de 1 a NaN verticalmente pero sólo representando los valores 1 y 2.
Quiero fila 1 valores para conectarse a través de la línea:
Ejemplo:
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'};
La forma más sencilla de hacer esto, es construir una matriz 2D que contiene los datos (si está presente), y NaNs en otro lugar. La mayoría de los comandos de trazado en Matlab ignoran NaNs.
Para convertir su matriz de células a una matriz, puede crear una matriz que contiene sólo NaNs, y rellenar los datos de la columna columna por la actualidad. Por ejemplo;
% 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
La matriz resultante M
contiene los valores de cada celda en C
, uno por columna. A continuación, puede simplemente trazar con
plot(M)