parcela Matlab de datos de la matriz categórica eje X y de células

J Paul

Tengo una matriz de células con células matrices anidadas: introducir descripción de la imagen aquí

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 trama debe tener este aspecto: introducir descripción de la imagen aquí

Ivana:

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 Mcontiene los valores de cada celda en C, uno por columna. A continuación, puede simplemente trazar con

plot(M)

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=377173&siteId=1
Recomendado
Clasificación