Label object
File: label.m
Location: ..\cubatch\label.m

function Labels = label(Lab,DefLab,Scalars,AxisLabels,Name,MeasUn)

Inputs:
Lab: can be char array or cell vector of chars or vector of doubles. In the latter case
the labels are in the form [DefLab number]. If scalars is defined this field is not necessary
DefLab: default: 'Var.'
Scalars: scalars to plot against. If Lab is empty the labels are in the form [scalar MeasUn]
MeasUn: default: ''
AxisLabels: char array or cell vector of arrays
Name: name of the label object
Outputs:
Labels: label object

Description:
A label object can refer to any dimension in a multidimensional array.
Assuming that one has a data set of dimensions 20 x 4 x 10, where the first dimension represents the samples,
the second the concentration of 4 different compounds and the third the measurement times (from 1 to 28 seconds
every third second).
One can than create three label objects respectively having length 20, 4 and 10.

> »Lab1 = label(1:20,'Sam',[],'Samples','Samples');
> »Lab2 = label({'Tryptophan','DOPA','Tyrosine','Phenilalanine'},'Comp.',[],...
> 'Compounds','Compounds');
> »Lab3 = label([],'',1:3:28,'Time (s)','Time','s');
> »Lab1,Lab2,Lab3

> Lab1 | Lab2 | Lab3
> Name : Samples Meas. unit: Def. label: Sam Axis label: Samples Labels : Sam 1 Sam 2 Sam 3 Sam 4 Sam 5 Sam 6 Sam 7 Sam 8 Sam 9 Sam 10 Sam 11 Sam 12 Sam 13 Sam 14 Sam 15 Sam 16 Sam 17 Sam 18 Sam 19 Sam 20 | Name : Compounds Meas. unit: Def. label: Comp. Axis label: Compounds Labels : Tryptophan DOPA Tyrosine Phenilalanine | Name : Time Meas. unit: s Def. label: Axis label: Time (s) Labels : 1 s 4 s 7 s 10 s 13 s 16 s 19 s 22 s 25 s 28 s

The label object can be treated as a normal vector:

> » t = Lab1(1:2:end)
> Name : Samples
> Meas. unit:
> Def. label: Sam
> Axis label: Samples
> Labels : Sam 1
> Sam 3
> Sam 5
> Sam 7
> Sam 9
> Sam 11
> Sam 13
> Sam 15
> Sam 17
> Sam 19

and t is a 10 x 1 label object:

> » whos t
> Name Size Bytes Class
> t 10x1 2116 label object

To access labels, scalars and the other properties of the label object one can use a dot as for structures:

> » Lab1.labels
> ans =
> 'Sam 1'
> 'Sam 2'
> 'Sam 3'
> 'Sam 4'
> 'Sam 5'
> 'Sam 6'
> 'Sam 7'
> 'Sam 8'
> 'Sam 9'
> 'Sam 10'
> 'Sam 11'
> 'Sam 12'
> 'Sam 13'
> 'Sam 14'
> 'Sam 15'
> 'Sam 16'
> 'Sam 17'
> 'Sam 18'
> 'Sam 19'
> 'Sam 20'

> » Lab3.scalars
> ans =
> 1
> 4
> 7
> 10
> 13
> 16
> 19
> 22
> 25
> 28
> » Lab2.axislabels
> ans =
> 'Compounds'
> » Lab2.deflab
> ans =
> Comp.
> » Lab2.name
> ans =
> Compounds

Complex constructions are also allowed for reference, e.g.

> » Lab1(1:2:end).labels

> > ans =
> > 'Sam 1'
> > 'Sam 3'
> > 'Sam 5'
> > 'Sam 7'
> > 'Sam 9'
> > 'Sam 11'
> > 'Sam 13'
> > 'Sam 15'
> > 'Sam 17'
> > 'Sam 19'

The scalars and the labels are kept together:

> » p = Lab3(1:5) | » p.scalars
> Name : Time Meas. unit: s Def. label: Axis label: Time (s) Labels : 1 s 4 s 7 s 10 s 13 s | ans = 1 4 7 10 13

The 'Def. label' (default label) is used to reconstruct undefined labels:

> » Lab(11:15)=Lab1(1:5)
> Name :
> Meas. unit:
> Def. label: Var.
> Axis label:
> Labels : Var. 1
> Var. 2
> Var. 3
> Var. 4
> Var. 5
> Var. 6
> Var. 7
> Var. 8
> Var. 9
> Var. 10
> Sam 1
> Sam 2
> Sam 3
> Sam 4
> Sam 5

because the default value for 'Def. label' is 'Var.' and Lab is an empty undefined matrix

> » Lab1(25)='Sample 30'
> Name : Samples
> Meas. unit:
> Def. label: Sam
> Axis label: Samples
> Labels : Sam 1
> Sam 2
> Sam 3
> Sam 4
> Sam 5
> ...
> ...
> Sam 20
> Sam 21
> Sam 22
> Sam 23
> Sam 24
> Sample 30

The labels between 21 and 24 are created automatically according to 'Def. label' (for Lab1: 'Sam')

The assigned value can either be a char array, a cell vector containing only strings or another label object.

> E.g.:

> > » t={'Fluoranthene','Nonylphenol'}';
> > » Lab2(6:7)=t
> > Name : Compounds
> > Meas. unit:
> > Def. label: Comp.
> > Axis label: Compounds
> > Labels : Tryptophan
> > DOPA
> > Tyrosine
> > Phenilalanine
> > Comp. 5
> > Fluoranthene
> > Nonylphenol

Note that t must be a column cell vector otherwise the operation will return the original label object
There is no filling in for the scalars themselves, which are instead turned automatically to 1:length(label) in
case the filling for the labels by means of 'Def. label' is applied. Hence if one defines the labels by scalars
it is basically not possible to update the label object without updating all the scalars at the same time,
otherwise all the scalars are lost:

> » Lab3.scalars = [2:3:29]
> Name : Time
> Meas. unit: s
> Def. label:
> Axis label: Time (s)
> Labels : 2 s
> 5 s
> 8 s
> 11 s
> 14 s
> 17 s
> 20 s
> 23 s
> 26 s
> 29 s

The length on the two sides of an assignment must be the same:
» Lab3.scalars = [2:3:22]
??? Error using ==> label/subsasgn
Unequal lengths
If one redefines one or more of the actual labels of a label object defined by scalars, the label update based on the automatic scheme [number measurement-unit] stops working, hence upon modification of the scalars, the labels remain the same:

> » Lab3(1)='Null'
> Name : Time
> Meas. unit: s
> Def. label:
> Axis label: Time (s)
> Labels : Null
> 5 s
> 8 s
> 11 s
> 14 s
> 17 s
> 20 s
> 23 s
> 26 s
> 29 s
> » Lab3.scalars = 1:3:28
> Name : Time
> Meas. unit: s
> Def. label:
> Axis label: Time (s)
> Labels : Null
> 5 s
> 8 s
> 11 s
> 14 s
> 17 s
> 20 s
> 23 s
> 26 s
> 29 s

Methods:
Only a few functions are defined on the label object:

- char
- display
- end, allows the use of "end" in subsref and subsasgn
- length, returns the number of labels of the labels object
- size, returns the number of labels in the first mode and 1 in the second mode
- subsasgn
- subsindex, label objects cannot be used as indexes therefore it returns an error message
- subsref

Related objects: Content, CBDataSet

Author:
Giorgio Tomasi
Royal Agricultural and Veterinary University
MLI, LMT, Chemometrics group
Rolighedsvej 30
DK-1958 Frederiksberg C
Danmark
Last modified: 17 Aug. 2002
Contact: Giorgio Tomasi, gt@kvl.dk