Cuando proceso datos en MATLAB uso estructuras. El uso de estructuras hace engorroso el acceso a los datos pero me facilita el manejo de los metadatos. Para cada variable creo una estructura con el campo datos donde almaceno el valor de la variable; el resto de los campos de la estructura contienen los metadatos.
Ejemplo 1
Para ilustrar el caso más sencillo, cuando tenemos un único conjunto de datos, supongamos que queremos graficar una serie de tiempo de la marea.
% Inicializar clear, close all % Se define la variable independiente Xdatos = linspace(0,24); Xnombre = 'Tiempo'; Xunidades = 'Horas'; XhusoHorario = 'UTC-8'; % Se define la variable dependiente Ydatos = sin(Xdatos/24*2*pi); Ynombre = 'Altura del Nivel del Mar'; Yunidades = 'm'; YnivelReferencia = 'Baja Mar Media Inferior'; % Graficado plot(Xdatos,Ydatos) xlabel([Xnombre ' (' Xunidades ')']); ylabel([Ynombre ' (' Yunidades ')']);
Ejemplo 2
Ahora consideremos un caso más complicado; supongamos que tenemos varias series de tiempo. En este caso uso una estructura anidada donde cada campo es una variable y agrego un campo extra llamado Info que a su vez es una estructura que contiene los metadatos de cada conjunto de datos (no de las variables).
% Inicializar clear, close all % Se define la primer serie de tiempo S(1)Infonombre='Ensenada, B.C.'; S(1)Infocoordenadas='31.8667 -116.5964'; S(1)Infoclave='9mtj6c1j5xkht'; S(1)Xdatos = linspace(0,24); S(1)Xnombre = 'Tiempo'; S(1)Xunidades = 'Horas'; S(1)Ydatos = sin(S(1)Xdatos/24*2*pi); S(1)Ynombre = 'Altura del Nivel del Mar'; S(1)Yunidades = 'm'; % Se define la segunda serie de tiempo S(2)Infonombre='El Sauzal, B.C.'; S(2)Infocoordenadas='31.9007 -116.6880'; S(2)Infoclave='9mtj2xq7h7jvk'; S(2)Xdatos = linspace(0,24); S(2)Xnombre = 'Tiempo'; S(2)Xunidades = 'Horas'; S(2)Ydatos = cos(S(2)Xdatos/24*2*pi); S(2)Ynombre = 'Altura del Nivel del Mar'; S(2)Yunidades = 'm'; % Graficado figure, hold on arrayfun(@(S) (plot(SXdatos , SYdatos, ...
'color',rand(1,3))), S) xlabel([S(1)Xnombre ' (' S(1)Xunidades ')']); ylabel([S(1)Ynombre ' (' S(1)Yunidades ')']); legend(arrayfun(@(S) (SInfonombre), S, ...
'UniformOutput',false))
Es importante que Info sea el único campo que no contiene el campo datos.