MATLAB Answers

the cyclist

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

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


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

  0 Comments


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) '}'])

  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.


Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply today