Bonjour,
J'arrive à afficher une courbe en appuyant sur un pushbutton, et j'aimerais qu'en recliquant sur le bouton elle disparaisse. C'est possible ?
Merci
Bonjour,
J'arrive à afficher une courbe en appuyant sur un pushbutton, et j'aimerais qu'en recliquant sur le bouton elle disparaisse. C'est possible ?
Merci
Bonjour,
Cela dépend de ce que tu entends par disparaître
Il existe la propriété 'Visible': set(monAxes,'visible','off').
Ou veux-tu juste le supprimer? delete(MonAxes).
En fait, j'ai un graphe avec 2 courbes, qui apparaissent lorsque je clique sur 1 des 2 pushbuttons (1 pushbutton par courbe)
J'aimerais pouvoir isoler une des courbes si je le souhaite en recliquant sur le pushbutton.
Actuellement mes courbes apparaissent bien toutes les 2, mais si je veux en retirer une du graphe, je suis obligé de recompiler mon interface et de ne cliquer que sur le bouton que je souhaite
Dans ce cas la propriété 'Visible' de l'objet courbe (et non de l'objet axe) est adaptée.
où hplot est le handle retourné par ta fonction 'plot' qui t'a permis d'afficher ta courbe. Il faut sûrement que tu sauves ce handle dans le callback de ton pushbutton, par exemple, dans la propriété 'UserData' du bouton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 set(hplot,'Visible','off') %set(hplot,'Visible','on') % pour le remettre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function ButtonCallBack(hObj,Event) hplot = get(hObj,'UserData'); if isempty(hplot) hplot = plot(1:10); set(hObj,'UserData',hplot); else if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off') else set(hplot,'Visible','on') end end
Ca fonctionne, mais quand je lui dis de tracer en utilisant des données issus de la simulation, j'ai ce message d'erreur
Mais en mettant directement un line ou plot dans le callback (sans créer de fonction), la courbe se trace sans soucis.??? Undefined function or variable 'd1'. Error in ==> interface>ButtonCallBack at 860 hplot = plot(d1,Fres); ??? Error while evaluating uicontrol Callback
Pourquoi dans le 1er cas Matlab ne connait pas ma variable et dans le 2e cas il l'utilise sans soucis ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 uicontrol(... 'Parent',testpanel(1),... 'units','normalized',... 'style','pushbutton',... 'String','affiche courbe',... 'position',[0.3,0.05,0.15,0.05],... 'callback','line(d1,Fres)');
Merci
dans le cas où tu utilises la chaine à la place de la fonction callbacks, matlab connait surement déjà d1 (tu n'as pas mis tout le code, mais je suppose que juste avant uicontrol(...), tu as d1=...
Dans le callback, d1 n'est pas connu puisque tu es dans une sous-fonction. Si tu veux qu'il soit connu, il faut le passer en paramètre de ton handle de fonction par exemple.
Dans ces deux cas, tu ne peux pas faire évoluer d1 indépendamment du callback, car d1 est passé en dur finalement. Ce n'est pas un pb si d1 est statique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 set(ButtonControl, 'Callback',{@ButtonCallBack,d1}) function ButtonCallBack(hObj,Event, data) % data = d1 ...
Si d1 peut etre dynamique, une autre possibilité est de calculer d1 directement dans ton callback.
Une autre est encore d'utiliser les setappdata/getappdata ou le guidata : cf. http://www.developpez.net/forums/d40...es-graphiques/
d1 est dynamique, je vais essayer setappdata et getappdata voir si ça fonctionne.
Merci de ton aide![]()
Ca fonctionne, je te remercie.
Mais il reste un dernier détail que je ne comprend pas.
J'ai ce code suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 uicontrol(... 'Parent',testpanel(1),... 'units','normalized',... 'style','pushbutton',... 'String','Afficher courbe test1',... 'position',[0.05,0.05,0.15,0.05],... 'callback',@trace_graphe_button1); uicontrol(... 'Parent',testpanel(1),... 'units','normalized',... 'style','pushbutton',... 'String','Afficher courbe test2',... 'position',[0.3,0.05,0.15,0.05],... 'callback',@graphe2);J'ai sauvegarder les valeurs utiles précédemment avec setappdata.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 function trace_graphe_button1(hObj,Event) %Récupération des valeurs d1=getappdata(gcbf,'valeur_de_d1'); Fres1=getappdata(gcbf,'valeur_de_Fres1'); handles = guidata(gcbf); hplot = get(hObj,'UserData'); if isempty(hplot) hplot = plot(d1,Fres1); %Courbe set(hObj,'UserData',hplot); else if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off') else set(hplot,'Visible','on') end end guidata(gcbf,handles) function graphe2(hObj,Event) %Récupération des valeurs d1=getappdata(gcbf,'valeur_de_d1'); Trainee1=getappdata(gcbf,'valeur_de_Trainee1'); handles = guidata(gcbf); hplot = get(hObj,'UserData'); if isempty(hplot) hplot = plot(d1,Trainee1); %Courbe set(hObj,'UserData',hplot); else if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off') else set(hplot,'Visible','on') end end guidata(gcbf,handles)
En fait, j'aimerais pouvoir avec les 2 courbes sur le même graphe et pouvoir "jongler" entre les 2 (faire disparaitre celle souhaitée, faire disparaitre l'autre, avoir les 2...)
Acutellement j'en affiche 1, puis la seconde. Et à partir du moment où la seconde courbe est affichée, il se passe comme si le 1er pushbutton devient inactif (je ne peux plus que faire apparaitre/disparaitre 1seule courbe...)
Merci
C'est ok, il manquait juste un petit "hold on".
Merci beaucoup
Une ligne à rajouter, sans quoi chaque nouveau plot efface l'ancien:
[EDIT] Ou hold on qui a le même effet oui...
Code : Sélectionner tout - Visualiser dans une fenêtre à part set(gca,'nextplot','add')
Bonjour,
Nouveau problème concernant l'affichage de mes courbes.
La 1ere courbe que j'affiche avec le bouton 1 s'affiche bien,
la 2e courbe que j'affiche avec le bouton 2 s'affiche également bien, mais lorsque je l'affiche, c'est comme si elle bloquait la 1ère courbe (je ne peux plus que afficher/cacher la dernière courbe affichée)
Et j'aimerais pouvoir "jongler" entre afficher la courbe1, la courbe2 ou les 2 en même temps.
Voici l'affichage de la courbe 1, b1 et F1 sont appelés avec getappdata et la fonction a comme argument (hObj et Event).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 handles = guidata(gcbf); hplot = get(hObj,'UserData'); if isempty(hplot) hplot = plot(handles.axes1,b1,F1,'b'); %Courbe hold on grid on set(hObj,'UserData',hplot); else if strcmp(get(hplot,'Visible'),'on'), set(hplot,'Visible','off') else set(hplot,'Visible','on') end end guidata(gcbf,handles)
La fonction est identique pour la courbe 2.
Merci
As-tu plusieurs objets Axes?
Dans ce cas, il serait bon de spécifier le handle lorsque tu utilises grid et surtout hold:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 hold(handles.axes1,'on') grid(handles.axes1,'on')
Oui j'ai 4 axes réparti sur 2 pages. Mais ils n'ont pas le même nom
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager