Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

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.]

0 Comments

the cyclist

Products

5 Answers

Answer by Kelly Kearney on 1 Aug 2011
Accepted answer

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

Kelly Kearney
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')

Jan Simon
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(:)))))

0 Comments

Fangjun Jiang
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

Oleg Komarov
Answer by Paulo Silva on 1 Aug 2011

My kludgy way:

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

3 Comments

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.

Paulo Silva

Contact us