2012-10-25 3 views
3

Je trace des données dans MATLAB en temps réel. Je veux utiliser une poignée. Mon problème est que je ne sais pas comment tracer plus d'une courbe Y-Data.Comment tracer plusieurs courbes dans MATLAB à l'aide des poignées

J'ai trouvé le code suivant Il montre comment tracer un ensemble de YData. Quelqu'un at-il une idée pour transformer le code en deux ou plusieurs ensembles de données Y, par ex. sind (x) comme une courbe supplémentaire dans l'intrigue?

x = 1:1000; 
y = cosd(x); 

xi = x(1); 
yi = y(1); 
h = plot(xi, yi, 'YDataSource', 'yi', 'XDataSource', 'xi'); 

for k = 2:1000... 
xi = x(1:k); 
yi = y(1:k); 
refreshdata(h, 'caller'); 
drawnow; 
end; 
+0

Connexes: http://stackoverflow.com/questions/13102654/comment-définir-la-date-date-des-data-d'un-plat-dans-matlab –

Répondre

2

Le code ci-dessous fonctionne pour moi, si vous voulez vraiment utiliser les poignées

x = 1:1000; 
y = cosd(x); 
y2 = sind(x); 

xi = x(1); 
yi = y(1); 
yi2 = y2(1); 
figure(1); clf; 
h = plot(xi, yi, 'YDataSource', 'yi', 'XDataSource', 'xi'); 
hold on; 
h2 = plot(xi, yi2, 'YDataSource', 'yi2', 'XDataSource', 'xi'); 

for k = 200:1000 
    xi = x(1:k); 
    yi = y(1:k); 
    yi2 = y2(1:k); 
    refreshdata(h); 
    refreshdata(h2); 
    drawnow; 
end; 

Vous avez besoin d'un hold on.

En outre, au lieu de refreshdata vous pouvez utiliser set comme Andrey suggéré:

set(h,'Xdata',xi,'YData',yi); 
set(h2,'Xdata',xi,'YData',yi2); 
+0

Merci beaucoup! Pour moi votre exemple l'a fait! L'intrigue en temps réel fonctionne maintenant en montrant plusieurs courbes. Très bonne réponse! – user1677716

3

Tout d'abord, n'utilisez jamais refreshdata. Utilisez la méthode directe set à la place.

 set(h,'Xdata',xi,'YData',yi); 

Deuxièmement, vous devez faire deux parcelles

 h1 = plot(xi, yi); 
     h2 = plot(xi, yi); 

et mettre à jour chacun en conséquence.

+0

Merci beaucoup jusqu'à présent Andrey. Si je fais deux parcelles, cela ne veut-il pas dire qu'il y aura deux chiffres? Suis un débutant Matlab, alors pardonnez-moi si cette idée est stupide. – user1677716

+0

Andrey, pourquoi ne devriez-vous pas utiliser 'refreshdata'? – angainor

+0

@angainor, une très bonne question. Je viens de l'écrire comme question et réponse http://stackoverflow.com/questions/13102654/how-should-i-update-the-data-of-a-plot-in-matlab. –

1

Vous cherchez peut-être le hold command?

plot(1 : 10, (1 : 10).^2, 'r') 
hold on 
plot(1 : 10, (1 : 10).^3) 

EDIT:

Vous pouvez utiliser hold en combinaison avec set de mettre à jour la parcelle (voir aussi Andrey's réponse):

h1 = plot(1 : 10, (1 : 10).^2, 'r'); 
hold on; 
h2 = plot(1 : 10, (1 : 10).^3); 
set(h1, 'XData', 1 : 2 : 20); 
set(h2, 'YData', 0.1 * (1 : 20).^3); 

Les axes automatiquement mis à jour.

+0

Hey Florian. J'ai lu que lorsqu'on fait des tracés en temps réel, il est supposé être plus efficace pour utiliser les poignées. A part ça, accroche mes haches (enfin je crois) que je ne désire pas. La mise en œuvre fonctionne bien avec les poignées en dehors du fait que je ne suis pas capable de tracer plusieurs lignes. – user1677716

+0

@ user1677716 'hold on' ne gèle pas vos axes. – angainor

+0

@ user1677716: Vous pouvez utiliser 'hold' avec les poignées, voir mon edit. En outre, comme angainor souligné, les axes seront toujours mis à jour automatiquement. –

0

Si vous ne concaténer souciez pas trop sur l'affichage de la même couleur pour toutes les courbes, simplement les données de x en un seul vecteur séparé par NaN entre les composants de la courbe (faire une chose similaire pour les données y). Alors la commande "plot" peut prendre dans ces plus grands vecteurs x et y et affichera tout en même temps. Vous pouvez contourner le problème de couleur en faisant quelque chose de similaire avec le tableau colordata.

Questions connexes