Creating legend based on numeric array

조회 수: 134 (최근 30일)
the cyclist
the cyclist 2011년 8월 1일
댓글: Fangjun Jiang 2020년 9월 16일
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.]

채택된 답변

Kelly Kearney
Kelly Kearney 2011년 8월 1일
One more:
legendCell = cellstr(num2str(N', 'N=%-d'))
  댓글 수: 3
TheStranger
TheStranger 2020년 9월 16일
But how one can insert a special tex-symbols like \omega and such in there? It throws an error.
Fangjun Jiang
Fangjun Jiang 2020년 9월 16일
use sprintf(), see special character section, get the unicode

댓글을 달려면 로그인하십시오.

추가 답변 (5개)

Steven Lord
Steven Lord 2020년 9월 16일
If you're using a newer release of MATLAB, I'd use a string array to create the legend.
N = [1 7 14 30 90 180 360];
x = linspace(0, 1, 17);
plot(x, N.*x.')
legendStrings = "N = " + string(N);
legend(legendStrings)

Jan
Jan 2011년 8월 1일
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
Oleg Komarov
Oleg Komarov 2011년 8월 1일
regexp(sprintf('N=%d',N),'N=\d+','match')

댓글을 달려면 로그인하십시오.


Paulo Silva
Paulo Silva 2011년 8월 1일
My kludgy way:
legendCell = eval(['{' sprintf('''N=%d'' ',N) '}'])
  댓글 수: 3
Paulo Silva
Paulo Silva 2011년 8월 1일
that's why I edited my question and removed it :)
Fangjun Jiang
Fangjun Jiang 2011년 8월 1일
I like the kludgy way. Seeing so many eval must have made a dent on your brain.

댓글을 달려면 로그인하십시오.


Fangjun Jiang
Fangjun Jiang 2011년 8월 1일
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(:)))))

Oleg Komarov
Oleg Komarov 2011년 8월 1일
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)).')

카테고리

Help CenterFile Exchange에서 Characters and Strings에 대해 자세히 알아보기

제품

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by