Creating legend based on numeric array
141 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
the cyclist
am 1 Aug. 2011
Kommentiert: Fangjun Jiang
am 16 Sep. 2020
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 Kommentare
Akzeptierte Antwort
Kelly Kearney
am 1 Aug. 2011
One more:
legendCell = cellstr(num2str(N', 'N=%-d'))
3 Kommentare
TheStranger
am 16 Sep. 2020
But how one can insert a special tex-symbols like \omega and such in there? It throws an error.
Weitere Antworten (5)
Steven Lord
am 16 Sep. 2020
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)
0 Kommentare
Jan
am 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 Kommentar
Paulo Silva
am 1 Aug. 2011
My kludgy way:
legendCell = eval(['{' sprintf('''N=%d'' ',N) '}'])
3 Kommentare
Fangjun Jiang
am 1 Aug. 2011
I like the kludgy way. Seeing so many eval must have made a dent on your brain.
Fangjun Jiang
am 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 Kommentare
Oleg Komarov
am 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)).')
Siehe auch
Kategorien
Mehr zu Characters and Strings finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!