MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

# Creating legend based on numeric array

Asked by the cyclist on 1 Aug 2011

I have a numeric array, for example:

```N = [1 7 14 30 90 180 360];
```

I want to create a cell array for use in a figure legend:

```legendCell = {'N=1','N=7',...,'N=360'}
```

This is trivial to do with a loop, and I can think of a couple ways that avoid loops that are a bit kludgy. What is the most elegant way?

[The "N=" part is fixed and known. It does not have to be the variable name.]

## Products

Answer by Kelly Kearney on 1 Aug 2011

One more:

` legendCell = cellstr(num2str(N', 'N=%-d'))`

## 1 Comment

Fangjun Jiang on 2 Aug 2011

Never noticed num2str could also specify format. Nice! +1

Answer by Jan Simon on 1 Aug 2011
```N = [1 7 14 30 90 180 360];
C = regexp(sprintf('N=%d#', N), '#', 'split');
C(end) = [];
```

Another solution: In older MATLAB versions DATAREAD (called as core function through STRREAD) was faster. But unfortunately these functions are deprecated. Now TEXTSCAN helps:

```CC = textscan(sprintf('N=%d#', N), '%s', 'Delimiter', '#');
C = CC{1};
```

## 1 Comment

Oleg Komarov on 1 Aug 2011

regexp(sprintf('N=%d',N),'N=\d+','match')

Answer by Fangjun Jiang on 1 Aug 2011
```legendCell=strcat('N=',strtrim(cellstr(num2str(N'))))
```

Or better for N could be column vector or row vector

```legendCell=strcat('N=',strtrim(cellstr(num2str(N(:)))))
```

Answer by Oleg Komarov on 1 Aug 2011

Hidden loop (troll):

```arrayfun(@(x) sprintf('N=%d',x),N,'un',0)
```

Based on Kelly's idea of '%-d':

```cellstr(reshape(sprintf('N=%-3d',N),floor(log10(abs(max(N))+1))+3,numel(N)).')
```

## 1 Comment

Answer by Paulo Silva on 1 Aug 2011

My kludgy way:

```legendCell = eval(['{' sprintf('''N=%d'' ',N) '}'])
```

Fangjun Jiang on 1 Aug 2011

Paulo, your first solution returns 1x1 cell

Paulo Silva on 1 Aug 2011

that's why I edited my question and removed it :)

Fangjun Jiang on 1 Aug 2011

I like the kludgy way. Seeing so many eval must have made a dent on your brain.