WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Plot in zwei verschiedene axes, problem mit handles

 

Andii
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 16.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.08.2017, 12:43     Titel: Plot in zwei verschiedene axes, problem mit handles
  Antworten mit Zitat      
Ich versuche mit einem Pushbutton die selbe Funktion in zwei unterschiedliche axes zu plotten, einmal als normalen plot und einmal als polarplot. Das funktioniert beim ersten Klick auf den Button auch wunderbar.

Code:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
x = 0:0.1:10;
y = sin(x)+1;
axes(handles.axes1)
plot(x,y)

axes(handles.axes2);
polarplot(x,y)
 


Sobald ich ein zweites Mal auf den Button klicke, kommt aber folgende Fehlermeldung:

Code:

Error using axes
Invalid axes handle

Error in ScannerFilterGUI>pushbutton1_Callback (line 86)
axes(handles.axes2);

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in ScannerFilterGUI (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)ScannerFilterGUI('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
 
Error while evaluating UIControl Callback

 


Ich verstehe nicht was falsch ist, bzw. warum es nur beim ersten Mal funktioniert...
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.08.2017, 13:17     Titel:
  Antworten mit Zitat      
Hallo,

vermutlich hast du dir irgendwo (und das nicht in diesem Codeausschnitt) die Handles-Struktur zerschossen.

Suche in deinem (gesamten) Code mal nach Zeilen
Code:
handles.axes2 = ...

Damit würde das Handle auf das Koordinatensystem überschrieben --> schlechte Idee.

Generell natürlich auch eine gute Idee: Debugger verwenden und schauen, was in handles so drin steht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Andii
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 16.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2017, 08:07     Titel:
  Antworten mit Zitat      
habe das überprüft aber nichts gefunden. Der gesendete Code stammt aus einem kleinen Testprogramm um dieses Problem zu lösen. Es ist ein GUI das nur aus einem pushbutton und 2 axes besteht. Alles was über den oben gesendeten Code hinausgeht sind automatisch von Matlab generierte Zeilen.

Ich bin noch blutiger Anfänger was GUIs angeht und habe die handles Struktur noch nicht verstanden.
Ist das handles?

figure1: [1x1 Figure]
pushbutton1: [1x1 UIControl]
axes2: [1x1 Axes]
axes1: [1x1 Axes]
output: [1x1 Figure]

Grüße und schonmal vielen Dank,
Andii
Private Nachricht senden Benutzer-Profile anzeigen
 
Andii
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 16.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2017, 08:33     Titel:
  Antworten mit Zitat      
ich habe noch etwas rumprobiert und dabei ist mir folgendes aufgefallen:

der folgende Code spuckt beim zweimaligen Klicken des Buttons die darauf folgende Meldung aus:

Code:

function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
x = [0:0.1:100];
y = sin(x);

axes1 = handles.axes1
axes2 = handles.axes2

axes(handles.axes2);
p = polarplot(y);

axes(handles.axes1);
k = plot(y);

axes1 = handles.axes1
axes2 = handles.axes2
 


Meldung im Command window nach erstem Klick
Code:


axes1 =

  Axes (axes1) with properties:

             XLim: [0 1]
             YLim: [0 1]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [7.4000 2.8462 109.4000 22.1538]
            Units: 'characters'

  Show all properties


axes2 =

  Axes (axes2) with properties:

             XLim: [0 1]
             YLim: [0 1]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [125.4000 2.6154 60 22.3846]
            Units: 'characters'

  Show all properties


axes1 =

  Axes with properties:

             XLim: [0 1200]
             YLim: [-1 1]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [7.4000 2.8462 109.4000 22.1538]
            Units: 'characters'

  Show all properties


axes2 =

  handle to deleted Axes
 


nach zweitem Klick
Code:

axes1 =

  Axes with properties:

             XLim: [0 1200]
             YLim: [-1 1]
           XScale: 'linear'
           YScale: 'linear'
    GridLineStyle: '-'
         Position: [7.4000 2.8462 109.4000 22.1538]
            Units: 'characters'

  Show all properties


axes2 =

  handle to deleted Axes

Error using axes
Invalid axes handle

Error in SealscannerFilterGUI>pushbutton1_Callback (line 87)
axes(handles.axes2);

Error in gui_mainfcn (line 95)
        feval(varargin{:});

Error in SealscannerFilterGUI (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)SealscannerFilterGUI('pushbutton1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback
 


löscht/überschreibt der Befehl axes(handles.axes123) irgendetwas?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.08.2017, 08:44     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
löscht/überschreibt der Befehl axes(handles.axes123) irgendetwas?

Falls ja, müsste das Problem ja schon bei axes1 auftreten. Mein Verdacht ist da eher die von dir verwendete Syntax von polarplot. Versuch mal
Code:
p = polarplot(handles.axes2, y);


Generell ist es hilfreich, wenn du ein reproduzierbares Beispiel zur Verfügung stellst. Dann kann man solche Vorschläge auch selbst ausprobieren und sehen, ob sie das Problem lösen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Chokri

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2017, 20:01     Titel:
  Antworten mit Zitat      
Hallo
versuchen den axes zu erst den alt zu löchen vor den neue plot durch 'cla'

axes(handles.axes1)
cla
plot(x,y)
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.11.2017, 14:09     Titel:
  Antworten mit Zitat      
Gibt es eine Lösung für das Problem?

Mein Problem ist zwar etwas anders, aber das Prinzip bleibt gleich.

Ich habe eine GUI mit einem Polar Plot und möchte, dass der User den rlim einstellen kann. In meine GUI habe ich 3 weitere axes.


Dabei habe ich bis jetzt folgendes ausprobiert:

mit polarplot:
bekomme ich dieselbe Meldung wie beim Andii und habe bis jetzt mit keiner Syntax das Problem gelöst.
Nachdem das Programm einmal gelaufen ist, wird der axes gelöscht. (in mein Fall handles.axes2)

Code:

ylim = get(handles.edit14, 'String');
ylim = str2double(ylim);
axes(handles.axes2)
scan = rand(1,715);
rad = 3.9706:-0.00672:-0.8290;        % es gibt 715 Werte für 275 Grad
polarplot(rad, scan)
 



mit polarplot und polaraxes:
Klappt wie man sich das vorstellt, außer, dass die Größe meiner axes nicht mehr stimmt. Egal was ich dabei mache, hat das Polar Plot eine feste Größe, die auch nicht veränderbar ist (oder habe dazu bis jetzt nichts gefunden). z.B. ursprungsgröße: 5x5. Nach polaraxes: 15x15

Code:
ylim = get(handles.edit14, 'String');
ylim = str2double(ylim);
axes(handles.axes2)
handles.axes2 = polaraxes;
scan = rand(1,715);
rad = 3.9706:-0.00672:-0.8290;        % es gibt 715 Werte für 275 Grad
polar(handles.axes2, rad, scan)
rlim([0 ylim])



mit polar (veraltet):
Da gibt es kein Befehl rlim, sodass man das Polar Plot nicht mehr benutzerdefiniert machen kann. Diese "Lösung" fällt also meiner Meinung nach raus.

Code:
ylim = get(handles.edit14, 'String');
ylim = str2double(ylim);
axes(handles.axes2)
scan = rand(1,715);
rad = 3.9706:-0.00672:-0.8290;        % es gibt 715 Werte für 275 Grad
polar(rad, scan)



Wenn also jemand eine Lösung hat, würde ich mich sehr freuen!
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.11.2017, 18:53     Titel:
  Antworten mit Zitat      
ich habe eine Lösung gefunden und zwar man muss folgendes Befehl aufrufen, nachdem man ein Polarplot gemacht hat:

Code:
handles.axes2=gca;


Also das ganze sieht dann so aus:

%% Anzeige Polar Plot

axes(handles.axes2)

scan = cellfun(@str2double,handles.scans(nummer,Smile);
rad = 3.9706:-0.00672:-0.8290; % es gibt 715 Werte für 275 Grad

polarplot(rad, scan)

handles.axes2=gca;
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.