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

Problem beim Zuweisen von verschiedenen Axes

 

Bennrich
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 13.08.2017, 21:07     Titel: Problem beim Zuweisen von verschiedenen Axes
  Antworten mit Zitat      
Hallo,

ich habe ein Problem beim Plotten von einem Weg- und einem Geschwindigkeitsverlauf in verschiedene Axes.

Das eigentliche Problem liegt beim Zuweisen zu Axes1 bzw. 2. Dieser Code funktioniert:
Code:
   b = fscanf(h, '%f');
    x = [ x, b ];

    plot(x);
   
    axis([ startSpot, (t/step+50), -250 , 250 ]);
    xlabel('Time [min]', 'FontSize', 12, 'FontName', 'Arial');
    ylabel('Weg [mm]', 'FontSize', 12, 'FontName', 'Arial');

      grid
      t = t + step;
      drawnow;


Sobald ich aber die Zuweisung zu axes1 ergänze (die wird nötig, da ich andere Daten in Axes2 plotten möchte), bekomme ich die Fehlermeldung
Code:
Not enough input arguments.

Error in LivePlotV1 (line 44)
    plot(handles.ax1,x)

Error in GUI_Versuchsstand (line 294)
LivePlotV1;
.

Die Zuweisung habe ich auf folgende Arten ausprobiert:
Code:
   plot(handles.ax1,x)

Code:
plot(x,'parent',handles.ax1);

Code:
axes(handles.ax1)
plot(x)


Bei allen Varianten erhalte ich die oben gezeigte Fehlermeldung (Not enough input arguments.)

Die Definition der Axes sieht wie folgt aus:
Code:
handles.ax1 = axes('Position',[0.5 0.1 0.45 0.3]);
                        xlabel('Time [min]', 'FontSize', 12, 'FontName', 'Arial');
                        ylabel('Weg [mm]', 'FontSize', 12, 'FontName', 'Arial');


Ich hoffe, dass ihr auch bei dieser Frage den entscheidenden Tipp für mich habt. Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2017, 21:37     Titel:
  Antworten mit Zitat      
Hallo,

plot(x) plottet den Vektor x gegen die Werte 1:numel(x).
Wenn du erweiterte Syntax verwenden willst, musst du das halt explizit angeben, also z.B.
Code:
plot(handles.ax1,1:numel(x), x)


Falls es sich bei x um eine Matrix handelt, muss man statt numel(x) die Zeilenanzahl verwenden.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 14.08.2017, 08:24     Titel:
  Antworten mit Zitat      
Leider scheint es daran nicht zu liegen. Denn auch der Ausdruck funktioniert nicht (gleiche Fehlermeldung):
Code:
axes(handles.ax1)
plot(x)
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.08.2017, 13:08     Titel:
  Antworten mit Zitat      
Hallo Bennrich,

Die Fehlermeldung sieht eindeutig so aus, als wäre entweder "handles" nicht definiert, oder "handles.ax1" ein FunctionHandle, obwohl Du es zunächst anders definiert hast. Du kannst dies leicht mit dem Debugger herausfinden:
Code:

Gib dies im Command window ein. Dann lassen den Code nochmal laufen, bis er beim Fehler stehen beibt. Nun teste, ob "handles" definiert ist und den Wert von "handles.ax1".

Der Debugger ist das wichtigste Werkzeug der Programmierers nach dem Editor und einer Tasse Kaffee.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Bennrich
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 14.08.2017, 14:48     Titel:
  Antworten mit Zitat      
Hallo Jan,

damit hat du wohl recht. Diese Meldung erscheint im Command Window:
Code:
Not enough input arguments.

Error in LivePlotV1 (line 47)
    axes(handles.ax1)

Error in GUI_Versuchsstand (line 315)
LivePlotV1;
 
47      axes(handles.ax1)
K>> handles
Undefined function or variable 'handles'.
 
47      axes(handles.ax1)
K>> handles.ax1
Undefined variable "handles" or class "handles.ax1".
 
47      axes(handles.ax1)


Handles definiere ich aber doch hier?!
Code:
handles.ax1 = axes('Position',[0.5 0.05 0.45 0.275]);
                        xlabel('Time [min]', 'FontSize', 12, 'FontName', 'Arial');
                        ylabel('Weg [mm]', 'FontSize', 12, 'FontName', 'Arial');


Der Plot Befehl steht in der Funktion "LivePlotV1":

Code:
function LivePlotV1(object_handle, event, handles)
....


Diese Funktion wird wiederum in der Callback-Funktion "Kommunikation_MC3" aufgerufen:
Code:
function Kommunikation_MC3(object_handle, event, handles)


Code:
PushbuttonD = uicontrol('Style', 'pushbutton', 'String', 'Position anfahren',...
                        'Units','normalized',...
                        'Position', [0.05 0.125 0.1 .06],...
                        'Callback', {@Kommunikation_MC3, popupmenu, handles});  


Wenn ich bei der Definition des Buttons noch ..,LivePlotV1,... ergänze, ergibt sich dieser Fehler:
Code:
Error using LivePlotV1
Too many output arguments.

Error in GUI_Versuchsstand (line 261)
                        'Callback', {@Kommunikation_MC3, popupmenu,LivePlotV1, handles});
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ein reproduzierbares Beispiel mit zusammenhängendem Code wäre hilfreich.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 16.08.2017, 09:36     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank für deine Geduld!
Ich habe ein möglichst einfaches Programm erstellt, dass mein Problem zeigt. Mit den auskommentierten Zeilen läuft es, wenn ich die mit rein nehme, läuft es leider nicht.
Der Fehler ist nach wie vor:
Code:
Not enough input arguments.

Error in Plot (line 13)
     axes(handles.ax1)

Error in BTclick (line 2)
    Plot;
 
Error while evaluating UIControl Callback


Hier die 3 M-Files:
Code:
%GUI
clc;
clear all;
close all;


handles.ax1 = axes('Position',[0.5 0.05 0.45 0.275]);
                        xlabel('Time [s]', 'FontSize', 12, 'FontName', 'Arial');
                        ylabel('Weg [mm]', 'FontSize', 12, 'FontName', 'Arial');
                       
% handles.ax2 = axes('Position',[0.5 0.375 0.45 0.275]);
%                         xlabel('Time [s]', 'FontSize', 12, 'FontName', 'Arial');
%                         ylabel('Geschwindigkeit [mm/s]', 'FontSize', 12, 'FontName', 'Arial');                        
                       
                       
PushbuttonD = uicontrol('Style', 'pushbutton', 'String', 'Messung starten',...
                        'Units','normalized',...
                        'Position', [.250 0.125 0.1 .06],...
                        'Callback', {@BTclick, handles});    


Code:
%BTclick
function BTclick(object_handle, event, handles)
    Plot;
end
 



Code:
%Plot
function Plot(object_handle, event, handles)

i=0;
x = [ , ];
y = [ , ];
tic

while(i<30)
    b = 1;
    x = [ x, b];
    a=diff(x);
    y = [ y, toc];
%     axes(handles.ax1)
    plot(y,x)
%     axes(handles.ax2)
%     plot(y,a)
    drawnow;
    i=i+1;
    pause(0.1);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du musst in der BTClick.m die Argumente an Plot.m übergeben:
Code:
   Plot(object_handle, event, handles);


Ich würde eine eigene Funktion nie Plot nennen. Auch wenn MATLAB Groß- und Kleinschreibung unterscheidet und es dadurch keinen Konflikt mit plot gibt, ist das doch sehr irritierend.

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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 07.08.17
Wohnort: Dortmund
Version: R2015b
     Beitrag Verfasst am: 16.08.2017, 10:53     Titel:
  Antworten mit Zitat      
Perfekt, vielen Dank für deine Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
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.