MATLAB - mise à jour de la parcelle dans le gui?
Débuter avec matlab guide, frapper une pierre d'achoppement. Got it aussi simple que je peux comme un jouet interface graphique pour illustrer mon problème. Une interface graphique (nommé asa) a un bouton poussoir et d'un axe. La fonction de rappel du bouton de lit
axesHandle= findobj(gcf,'Tag','axes1');
x=rand(randi(10+20,1),4);
plot(axesHandle, x)
Il n'y a pas d'autre code écrit par moi (guide de l'écrit).
La 1ère fois que j'appuie sur le bouton, tout est parfait: l'intrigue est fait. La 2ème fois, j'obtiens un message d'erreur, à partir de la console:
Error using plot
Vectors must be the same lengths.
Error in asas>pushbutton1_Callback (line 83)
plot(axesHandle, x)
Error in gui_mainfcn (line 96)
feval(varargin{:});
etc...
Je veux tracer les nouvelles données x, en remplacement de l'ancien.
Il ressemble à matlab n'est pas de remplacer les données de l'intrigue, mais en quelque sorte essayer d'ajouter à l'intrigue?
J'ai cherché, mais n'ai rien trouvé qui s'applique.
Merci Dan pour une réponse rapide. oui, ça fonctionne! J'ai pensé que j'ai toujours eu pour spécifier l'emplacement de la parcelle -- va montrer mon ignorance, je suppose. Tous les pointeurs à pourquoi mon code d'origine est mauvais (Dan ou quelqu'un d'autre), s'il vous plaît?
Je suppose que la façon dont vous l'ont eu avant n'était pas de compensation du graphique. Il est probablement préférable de le garder similaire à la façon dont vous l'avais avant mais juste effacer manuellement le graphique avant de traçage à nouveau, mais je ne suis pas à 100% à propos de tout cela.
En termes de remplacement de l'ancienne parcelle, pourriez-vous simplement de mettre en œuvre
clf
sur le bouton de la presse, donc ça va toujours essayer de tracer sur une nouvelle parcelle.OriginalL'auteur pedro silva | 2012-07-09
Vous devez vous connecter pour publier un commentaire.
L'explication n'est pas simple - et certainement pas si vous êtes nouveau avec MATLAB et sa poignée sous-système graphique.
Votre code comme il est, ligne par ligne:
La première ligne tente de localiser dans le courant de la figure (
gcf
, "en cours") un enfant de l'objet avec la propriété'Tag'
ensemble de la chaîne de'axes1'
. Je suppose que vous êtes au courant de cela? La deuxième ligne de cours génère des données aléatoires à l'intrigue. Le troisième ligne de parcelles données enx
.Mais après la
plot
-l'appel de la propriété'Tag'
est en fait reset pour''
(la chaîne vide), ce qui rendfindobj
échouer dans toutes les recherches ultérieures pour les axes poignée. La variableaxesHandle
avec donc PAS contenir une réelle poignée mais au lieu de la matrice vide[]
. Cela va faire de la parcelle par défaut à un autre mode d'interpréter la matrice vide que les données pour le x-axes (le premier argument deplot
). Cela attendre les résultats dans l'erreur que vous recevez:La solution par Dan dans le commentaire ci-dessus est une solution de contournement, mais il est de bon sens en disant
plot
où l'intrigue - en particulier dans les Interfaces graphiques.La place, vous pouvez ajouter une quatrième ligne:
Ceci permettra de définir la propriété
'Tag'
retour à'axes1'
et tous les clics sur le bouton devrait maintenant fonctionner. Et vous pouvez ajouter plusieurs axes-objets maintenant. Si c'est ce que vous voulez.Maintenant, vous devriez être en mesure de voter 😛 je suis heureux, il a travaillé. Veuillez également accepter la réponse si il résolu votre problème.
fait et fait! .
Ole la réponse est claire et les grands! Merci!
OriginalL'auteur Ole Thomsen Buus