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 per klick aktualisieren

 

Vanillebacke
Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 06.11.2009, 15:06     Titel: plot per klick aktualisieren
  Antworten mit Zitat      
moin,

hab da folgende problematik:

ich habe einen plot mit ca. 100 messreihen. ich kann mittels eines popup menü die messreihe auswählen und in einem textfeld mir die breite der messreihe (fensterbreite) festlegen, die ich im plot darstellen möchte. Jetzt will ich, dass mit einem klick, die nächste messreihe dargestellt wird.

z.b.: plot 1: von Messreihe 1 bis 5, da fensterbreite = 5
plot 2: von Messreihe 2 bis 6, da fensterbreite = 5
plot 3:von Messreihe 1 bis 5, da fensterbreite = 5
usw...

kann mir da jemand weiterhelfen...???


danke schon mal

gruß vb
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2009, 15:33     Titel:
  Antworten mit Zitat      
Hallo,

falls du deine GUI in GUIDE geschrieben hast:
Koordinatensystem in GUIDE rechtsklicken -> View Callbacks -> ButtonDownFcn... Dort dann den Code für die Aktualisierung eintragen.

Falls die GUI programmatisch geschrieben ist: dem Koordinatensystem die Aktualisierungsfunktion mit set als 'ButtonDownFcn' zuordnen.

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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 06.11.2009, 15:43     Titel:
  Antworten mit Zitat      
könntest du mir mit dem code wseiterhelfen......????
Private Nachricht senden Benutzer-Profile anzeigen
 
Vanillebacke
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 06.11.2009, 15:54     Titel:
  Antworten mit Zitat      
mit klick war auch ein klick auf einem pushbutton gemeint....
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2009, 16:06     Titel:
  Antworten mit Zitat      
Hallo,

Sag das doch Wink Und dann eben über den Callback des Pushbuttons...

Zitat:
plot 1: von Messreihe 1 bis 5, da fensterbreite = 5
plot 2: von Messreihe 2 bis 6, da fensterbreite = 5
plot 3:von Messreihe 1 bis 5, da fensterbreite = 5

bei plot 3 soll das wohl 3 bis 7 heissen?

Wie die Aktualisierung erfolgt, hängt nicht zuletzt auch von der Form ab, in der deine Messdaten vorliegen. Um das ganze möglichst schnell laufen zu lassen, ist es wahrscheinlich am besten, direkt auf die Eigenschaften des Koordinatensystems zuzugreifen.

Code:
set(gca, 'xdata', neue_xdaten)
set(gca, 'ydata', neue_ydaten)


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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 06.11.2009, 16:20     Titel:
  Antworten mit Zitat      
ja sollte so heissen.....Smile

bisher wird mir noch eine fehlermeldung angezeigt....:

error using set......
there is no 'ydata'proberty in the axes class

......

hmmmm
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2009, 16:23     Titel:
  Antworten mit Zitat      
Ups, sorry... xdata und ydata sind Eigenschaften des Plots an sich... müsstest also das Handle zurückgeben, wenn du den Plot erzeugst...

Code:
p = plot ( ... )
...
set(p, 'xdata', ...)
set(p, 'ydata', ...)


Falls das p in unterschiedlichen Aufrufen erzeugt wird, könnte man es z.B. in userdata abspeichern.

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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 06.11.2009, 16:33     Titel:
  Antworten mit Zitat      
also zumindest zeigt er mir keine fehlermeldung mehr an.... beim aufruf aber wird mir der aktuelle plot wierder dargestellt.... er springt aber nicht um einen weiter....???!!!!! Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.11.2009, 16:39     Titel:
  Antworten mit Zitat      
Hallo,

du musst natürlich dafür sorgen, dass bei jedem Sprung in die Funktion ein anderer Bereich angezeigt wird. Vorschlag z.B.:

erster Aufruf: offset = 0
dann: offset = offset + 1

offset gibt dann an, wieviele Messreihen zu überspringen sind.

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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 06.11.2009, 16:45     Titel:
  Antworten mit Zitat      
irgendwie steh ich jetzt grad auf den schlauch.... bin in der programmiersprache auch nicht so der bewanderste.... wie genau muss ich das in meinem code mit einbauen:

Code:


% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


%Laden der globalen Variablen:
global A ;      %Messdaten der Sensore                                            
global i;       %Laufindex der Sensoren
global fb;      %Fensterbreite
global D2;      %handle von Plot 2
global xData;   %Datum und Zeit
global DT
global DT_seriell




i=get(handles.popupmenu1,'Value');    % Das Value aus dem PopUpMenu wird hier wieder
                                      % aufgegriffen

%Fensterbreite (fb):
%die im Editfenster 1 eingegeben wurde wird hier als Variabel weiterverwendet.
%Sie muss jedoch erst in "Double" Format umgewandelt werden.
fb= str2double(get(handles.edit1, 'String'));

%Plotten meiner ausgewählten Sensoren mit der angegebenen Fensterbreite
DT = evalin('base','rowheaders');
DT_seriell=datenum(DT,'dd.mm.yyyy HH:MM:SS');
xData=DT_seriell;
D2=plot(handles.axes1,xData,A(:,i:i+fb-1));
set(gca,'XTick',xData);
datetick(handles.axes1,'x',13);

set(D2,'xData');
set(D2,'yData');

%Achsenbeschriftung
ylabel ( handles.axes1, 'FTU [-]');
xlabel (handles.axes1, 'Zeit');
zoomAdaptiveDateTicks('on');

end
 


versuche da hinter zu kommen... kannst mir helfen harald?

danke schonmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

diesen Code
Code:
D2=plot(handles.axes1,xData,A(:,i:i+fb-1));
set(gca,'XTick',xData);
datetick(handles.axes1,'x',13);

set(D2,'xData');
set(D2,'yData');


würde ich in etwa so ändern

Code:
if ~exist('D2', 'var')
% Wenn noch kein Plot existiert, den ersten erstellen
D2=plot(handles.axes1,xData,A(:,i:i+fb-1));
datetick(handles.axes1,'x',13);
else
% wenn es einen gibt, die y-Daten ändern (x-Daten bleiben ja gleich)
set(D2,'yData',A(:,i:i+fb-1));
end
i = i + 1; % i erhöhen, damit beim nächsten Mal was anderes geplottet wird


Ich habe den Code jetzt trocken geschrieben, also keine Garantie, dass es funktioniert.

Generell würde ich versuchen, nach Möglichkeit ohne globale Variablen und evalin / assignin auszukommen, da das die Fehlersuche ggf. erschwert.

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

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 11.11.2009, 11:06     Titel:
  Antworten mit Zitat      
moinsen,

konnte den code erst heute ausprobieren......

hab den mal eingefügt bzw. so geändert..... klappt aber leider noch nicht! Sad

es wird mir folgende fehlermeldung angezeigt:

error using -----> set
Value must be a column or row vector!!!


kann mir da jemand weiterhelfen?????

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Vanillebacke
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 11.11.2009, 11:32     Titel:
  Antworten mit Zitat      
also den fehler hab ich beseitigt und der code läuft zwar aber durch weiteres klicken springt der plot nicht weiter, sondern er aktualisiert nur den plot noch mal......

steht evtl das i+1 an falscher stelle????

hier der aktuelle code:
Code:

% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


%Laden der globalen Variablen:
global A ;      %Messdaten der Sensore                                            
global i;       %Laufindex der Sensoren
global fb;      %Fensterbreite
global D2;      %handle von Plot 2
global xData;   %Datum und Zeit
global DT
global DT_seriell




i=get(handles.popupmenu1,'Value');    % Das Value aus dem PopUpMenu % wird hier wieder  aufgegriffen

% Fensterbreite (fb):
% die im Editfenster 1 eingegeben wurde wird hier als Variabel %
% weiterverwendet.
% Sie muss jedoch erst in "Double" Format umgewandelt werden.
fb= str2double(get(handles.edit1, 'String'));

% Plotten meiner ausgewählten Sensoren mit der angegebenen
% Fensterbreite
DT = evalin('base','rowheaders');
DT_seriell=datenum(DT,'dd.mm.yyyy HH:MM:SS');
xData=DT_seriell;

if exist('D2','var')
% Wenn noch kein Plot existiert, den ersten erstellen
D2=plot(handles.axes1,xData,A(:,i:i+fb-1));
set(gca,'XTick',xData);
datetick(handles.axes1,'x',13);

else
% wenn es einen gibt, die y-Daten ändern (x-Daten bleiben ja gleich)
set(D2,'yData',A(:,i:i+fb-1));
end
i=i+1; % i erhöhen, damit beim nächsten mal was anderes geplottet wird.

% Achsenbeschriftung
ylabel (handles.axes1, 'FTU [-]');
xlabel (handles.axes1, 'Zeit');
zoomAdaptiveDateTicks('on');

end
 


probier weier rum aber vielleicht hat noch jemand ne idee oder die lösung??!!!!

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Vanillebacke
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 11.11.2009, 12:30     Titel:
  Antworten mit Zitat      
von der logik würde ich sagen, der code müsste so lauten:

Code:



% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


%Laden der globalen Variablen:
global A ;      %Messdaten der Sensore                                            
global i;       %Laufindex der Sensoren
global fb;      %Fensterbreite
global D2;      %handle von Plot 2
global xData;   %Datum und Zeit
global DT
global DT_seriell




i=get(handles.popupmenu1,'Value');    % Das Value aus dem PopUpMenu % wird hier wieder  aufgegriffen

% Fensterbreite (fb):
% die im Editfenster 1 eingegeben wurde wird hier als Variabel %
% weiterverwendet.
% Sie muss jedoch erst in "Double" Format umgewandelt werden.
fb= str2double(get(handles.edit1, 'String'));

% Plotten meiner ausgewählten Sensoren mit der angegebenen
% Fensterbreite
DT = evalin('base','rowheaders');
DT_seriell=datenum(DT,'dd.mm.yyyy HH:MM:SS');
xData=DT_seriell;

if ~exist('D2','var')
% Wenn noch kein Plot existiert, den ersten erstellen
D2=plot(handles.axes1,xData,A(:,i:i+fb-1));
set(gca,'XTick',xData);
datetick(handles.axes1,'x',13);

else
% wenn es einen gibt, die y-Daten ändern (x-Daten bleiben ja gleich)
i=i+1; % i erhöhen, damit beim nächsten mal was anderes geplottet wird.
D2=plot(handles.axes1,xData,A(:,i:i+fb-1));
set(gca,'XTick',xData);
datetick(handles.axes1,'x',13);
end
 

% Achsenbeschriftung
ylabel (handles.axes1, 'FTU [-]');
xlabel (handles.axes1, 'Zeit');
zoomAdaptiveDateTicks('on');

end


 


es wird mir jetzt zwar keine fehlermeldung angezeigt, aber er aktuialisiert immer noch den ersten plot.... und springt nicht einen weiter!!!???

HILFE!!!??????
Private Nachricht senden Benutzer-Profile anzeigen
 
Vanillebacke
Themenstarter

Forum-Century

Forum-Century


Beiträge: 167
Anmeldedatum: 06.05.09
Wohnort: Hamburg
Version: R2014a
     Beitrag Verfasst am: 11.11.2009, 18:49     Titel:
  Antworten mit Zitat      
moin.

also mit dem unten angebenen code, komme ich nur einen weiteren plot wweiter.
Beispiel:

plot von 4 messreihen:

plot 1--> 4,5,6,7
plot 2--> 5,6,7,8
plot 3--> 5,6,7,8 sollte aber 6,7,8,9 dargestellt werden.

kann mir jemand sagen, wie ich den code ändern muss. damit mir das gelingt????

danke schonmal

Code:

% --- Executes on button press in WEITER.
function WEITER_Callback(hObject, eventdata, handles)
% hObject    handle to WEITER (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Laden der globalen Variablen:
global A ;      %Messdaten der Sensore                                            
% global i;       %Laufindex der Sensoren
% global fb;      %Fensterbreite
global D2;      %handle von Plot 2
global xData;   %Datum und Zeit
global DT
global DT_seriell



handles.s=get(handles.popupmenu1,'Value');

% Fensterbreite (fb):
% die im Editfenster 1 eingegeben wurde wird hier als Variabel weiterverwendet.
% Sie muss jedoch erst in "Double" Format umgewandelt werden.
fb= str2double(get(handles.edit1, 'String'));

% Plotten meiner ausgewählten Sensoren mit der angegebenen Fensterbreite
DT = evalin('base','rowheaders');
DT_seriell=datenum(DT,'dd.mm.yyyy HH:MM:SS');
xData=DT_seriell;

handles.s=handles.s+1;

guidata(hObject,handles);
D2=plot(handles.axes1,xData,A(:,handles.s:handles.s+fb-1));
set(gca,'XTick',xData);
datetick(handles.axes1,'x',13);


% Achsenbeschriftung
ylabel ( handles.axes1, 'FTU [-]');
xlabel (handles.axes1, 'Zeit');
zoomAdaptiveDateTicks('on');


end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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 - 2025 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.