Creating legend based on numeric array
Afficher commentaires plus anciens
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.]
Réponse acceptée
Plus de réponses (5)
Steven Lord
le 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)
Jan
le 1 Août 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 commentaire
Oleg Komarov
le 1 Août 2011
regexp(sprintf('N=%d',N),'N=\d+','match')
Paulo Silva
le 1 Août 2011
My kludgy way:
legendCell = eval(['{' sprintf('''N=%d'' ',N) '}'])
3 commentaires
Fangjun Jiang
le 1 Août 2011
Paulo, your first solution returns 1x1 cell
Paulo Silva
le 1 Août 2011
that's why I edited my question and removed it :)
Fangjun Jiang
le 1 Août 2011
I like the kludgy way. Seeing so many eval must have made a dent on your brain.
Fangjun Jiang
le 1 Août 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(:)))))
Oleg Komarov
le 1 Août 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 commentaire
Andrei Bobrov
le 1 Août 2011
+1
Catégories
En savoir plus sur Characters and Strings dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!