Verfasst am: 06.11.2009, 15:06
Titel: plot per klick aktualisieren
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...
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.
Sag das doch 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.
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....???!!!!!
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 Plot2 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);
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
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 Plot2 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;
ifexist('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.
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 Plot2 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
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 Plot2 global xData; %Datum und Zeit
global DT
global DT_seriell
% 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;
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
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.