MATLAB Answers

Create Legend From Array

881 views (last 30 days)
Christopher Saltonstall
Christopher Saltonstall on 19 Dec 2017
Edited: KL on 19 Dec 2017
Hello,
I have an array
nN = 6;
N = 1:nN;
I want to make a legend where nN changes and so may not be known ahead of time. I found the following solution on another post, but it doesn't work for me.
legendCell = cellstr(num2str(dope, 'N=%-d'));
legend(legendCell)
I get the error.
Error using legend>process_inputs (line 563)
Cell array argument must be a cell array of character vectors.
Error in legend>make_legend (line 328)
[autoupdate,orient,location,position,children,listen,strings,propargs]
= process_inputs(ha,argin); %#ok
Error in legend (line 282)
make_legend(ha,args(arg:end),version);
So, I tried
for iN = 1:nN
legendCell{iN} = cellstr(['n = ' num2str(N(iN))]);
end
legend(legendCell)
which gives a similar error. However, the following does work.
legendCell = {'n=1', 'n=2', 'n=3', 'n=4', 'n=5', 'n=6'};
legend(legendCell)
Why does the later work but the others don't?

  0 Comments

Sign in to comment.

Accepted Answer

Jos (10584)
Jos (10584) on 19 Dec 2017
In the first two codes, legendCell is a cell array of cells ( = {{..} {...}} ) rather than a cell array of strings (= {'..' '..'})! You have a pair of curly braces too many, as cellstr creates a cell, which you then put into a cell :)
Try this:
for iN = 1:nN
legendCell{iN} = num2str(N(iN),'N=%-d');
end

  0 Comments

Sign in to comment.

More Answers (1)

KL
KL on 19 Dec 2017
Edited: KL on 19 Dec 2017
Without a loop maybe,
legendCell = strcat('N=',string(num2cell(1:nN)))
and then as you might know,
legend(legendCell)

  0 Comments

Sign in to comment.

Sign in to answer this question.