2016-10-15 2 views
0

Je souhaite tracer plusieurs lignes avec un appel à plot(), avec des styles de trait différents pour chaque ligne. Voici un exemple:Comment transmettre un tableau de spécifications de ligne ou de styles à tracer?

deux

plot([1,2,3]', [4,5;6,7;8,9], {'-o', '-x'}) 

et

hs = plot([1,2,3]', [4,5;6,7;8,9]) 
set(hs, 'LineStyle', {'--'; '-'}) 

ne fonctionnent pas. J'ai essayé tout un tas de combinaisons d'arcanes avec des accolades carrées et bouclées, mais rien ne semble faire l'affaire.

Je sais qu'il est possible de faire une boucle dans les colonnes de Y et d'appeler plot() pour chacune (comme dans this question), mais ce n'est pas ce que je cherche. Je voudrais vraiment éviter d'utiliser une boucle ici si possible.

Merci. PS: J'ai trouvé ce script 'prettyPlot' qui dit qu'il peut faire quelque chose comme ça, mais je veux savoir s'il y a une façon intégrée de le faire.

PPS: Pour tous ceux qui veulent une solution rapide à cela, essayez ceci:

for i = 1:length(hs) 
    set(hs(i), 'Marker', markers{i}); 
    set(hs(i), 'LineStyle', linestyles{i}); 
end 

par exemple avec markers = {'+','o','*','.','x','s','d','^','v','>','<','p','h'}

Répondre

1

Se référant à http://www.mathworks.com/help/matlab/ref/plot.html, voici comment dessiner plusieurs lignes avec une seule commande de terrain:

plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) 

Donc votre idée de

plot([1,2,3]', [4,5;6,7;8,9], {'-o', '-x'}) 

doit être écrit comme:

plot([1,2,3]', [4,6,8], '-o', [1,2,3]',[5,7,9],'-x') 

résultant:

Multiple lines with single plot command

Réorganiser paramètres d'entrée en réseaux de cellules et d'utiliser cellfun pour appliquer la commande de tracé à chaque élément de cellule.

x = [1,2,3]'; 
xdata = {x;x}; 
ydata = {[4,6,8];[5,7,9]};  
lspec = {'-o';'-x'}; 

hold all; 
cellfun(@plot,xdata,ydata,lspec); 
+0

Merci pour votre réponse. L'exemple que j'ai donné dans ma question était juste pour montrer la forme de mes données, c'est-à-dire un tableau pour X, une matrice pour Y. Ces structures sont généralement très grandes, les divisant manuellement en arguments séparés en 'plot()' n'est pas vraiment pratique pour moi. Y a-t-il un moyen de passer dans une sorte de matrice de cellules qui se déroule comme par magie dans la spécification de paramètre ci-dessus? – Aralox

+0

Que diriez-vous de réorganiser Y1 et utiliser cellfun pour itérer la fonction de traçage. J'ai ajouté un exemple à la réponse. – Bambang

+0

Hey ça regarde beaucoup mieux! Existe-t-il un moyen de permuter/transformer une matrice régulière i by j en un tableau de cellules qui ressemble à 'ydata' ci-dessus? Fondamentalement, pour convertir mon tableau x numérique et ma matrice en formes qui fonctionneront avec 'cellfun()' – Aralox