Hey Leute habe folendes Problem:
in meiner Gui lade ich über einen Pushbutton eine Excel Tabelle, kann dann über 2 Pup-up Menüs die Spalte wählen, und das ganze wird dann gleich geplottet. Das funktioniert auch alles wunderbar. Nun will ich allerdings die eingelesenen Graphen mithilfe eines Sliders verschieben. Hab mir auch schon andere Beiträge dazu durchgelesen aber irgendwie steig ich nicht dahinter. Klar das ich den Wert einlesen muss. Nur wenn ich das im Slider_callback mache, fehlen mir dort ja die Werte die ich vorher mithilfe des pushbuttons eingelesen hab? Oder verwechsel ich irgendwas
Danke!
Welche der drei Methoden für dich am praktischsten ist, kommt ganz auf das Programm an. Aber Du könntest auch die UserData der AXES oder des Sliders selbst benutzen.
Vielen Dank für die schnelle Antwort.
Wo besteht der Unterschied zwischen den Methoden?
Das Problem ist das ich sehr viele Werte benötige. Da am Ende ca. 10 verschieden Excel Tabellen eingelesen werden sollen und alle zusammen in ein Axes-Feld in der GUI geplottet werden. Das mit dem Figure hat mir irgendwie nicht geholfen oder hab ich was falsch gemacht? Hier mein Code abgekürzt.
Code:
function[x,y] = readExcelColumns(fileName, xColNum, yColNum)
a = xlsread(fileName);
x = a(:,xColNum)*24;
y = a(:,yColNum);
function updateAxes(hObject, eventdata,handles)
xColNum = get(handles.popupmenuX,'value');
yColNum = get(handles.popupmenuY,'value');
fileName = handles.fileName;
[x,y] = readExcelColumns(fileName, xColNum, yColNum );
plot(handles.axes1, x ,y) hold on
FigX = figure;
set(FigX, 'UserData1', x);
FigY = figure;
set(FigY, 'UserData2', y)
function slider3_Callback(hObject, eventdata, handles)
FigX = ancestor(hObject, 'figure');
h = get(FigX, 'UserData1', x);
FigY = ancestor(hObject, 'figure');
y = get(FigY, 'UserData2', y);
a = get(handles.slider3,'Value');
x = h+a ;
plot(handles.axes1, x ,y)
In der Dokumentation findest Du einiges, wenn Du z.B. per "docsearch" nach den Begriffen suchst. Es wäre nicht sinnvoll, wenn ich hier die Dokumentation nacherzähle ;-)
Kurze Zusammenfassung: UserData gab es schon seit mindestens Matlab 4.1, ApplicationData erst ab 6.1 (so weit ich mich erinnere). GUIDATA benutzt intern ebenfalls SETAPPDATA und GETAPPDATA, so dass hier kein grundsätzlicher Unterschied besteht. Ob UserData oder ApplicationData ist letztendlich egal. Ich speichere alle fixen Werte in den ApplicationData, also Handles der UICONTROLs, Farben der GUI, etc, und Daten, die die eigentliche Berechnung betreffen in den UserData. Das könnte man aber genausogut auch andersherum machen.
Zitat:
Das Problem ist das ich sehr viele Werte benötige
.
Wenn Du mehrere GigaByte in den UserData oder ApplicationData speichern möchtest, kann das zu Problemen führen. Die Installation von mehr RAM ist dann die einzige sinnvolle Abhilfe. Wenn Du nur von ein paar hundert MegaByte redest, ist das auf modernen Maschinen harmlos.
Zitat:
Code:
function slider3_Callback(hObject, eventdata, handles)
FigX = ancestor(hObject, 'figure');
h = get(FigX, 'UserData1', x);
FigY = ancestor(hObject, 'figure');
y = get(FigY, 'UserData2', y);
Nein, nicht so. "hObject" ist das Objekt, das den Callback ausgelöst hat, also z.B. der Button. "ancestor(hObject, 'figure')" ist die Figure, in dem der Button liegt. deshalb sind nun "FigX" und "FigY" identisch.
Die Figure besitzt eine Eigenschaft ("Property"), die "UserData" heißt, aber keine, die "UserData1" oder "UserData2" heißen. Es wäre auch nicht hilfreich, die UserData der neu erzeugten Figures zu benutzen, weil man deren Handles erstmal nicht kennt. An den Handle der Figure, die den Button enthält, kommt man dagegen leicht mit dem ANCESTOR()-Befehl heran.
Danke für die schnelle Hilfe ich glaub so langsam kapier ich es. Hab vorher aber noch nie Programmiert. Hab mir das auch mal durchgelesen. Hab es jetzt mal so probiert :
Code:
function pushbuttonLoadXLS_Callback(hObject, eventdata, handles) % Das ist der Button mit dem man das Excel-file aussuchen kann und bei dem es auch gleich geplottet wird. ...
FigX = figure;
% Wenn ich das richtig verstanden hab muss hier für figure jetzt das fenster der Gui da stehen oder?! Woher bekomm ich da den Namen? set(FigX, 'UserData', x);
FigY = figure;
% Hier dann genauso? set(FigY, 'UserData', y)
function slider3_Callback(hObject, eventdata, handles)
FigX = ancestor(pushbuttonLoadXLS, 'figure');
% Ist das so richtig mit dem pushbuttonLoadXLS ? figure wäre dann die selbe wie oben?
h = get(FigX, 'UserData', x);
FigY = ancestor(pushbuttonLoadXLS, 'figure');
y = get(FigY, 'UserData', y);
a = get(handles.slider3,'Value');
x = h+a ;
plot(handles.axes1, x ,y)
Danke dir Jan hast mir schonmal ein großen Stück geholfen!
Klappt auch super jetzt. Nur ist schon wieder das nächste Problem aufgetaucht. Weiß nicht ob ich dafür ein neues Thema eröffnen soll?
Hab jetzt 8 verschiedene Daten eingelesen, kann sie auch jeweils in ein eigenes Axes plotten. Nun will ich aber zum Abschluss alle zusammen in eins Plotten. Problem dabei, auf Knopfdruck funktioniert das alles, wenn ich dann natürlich einen verschiebe muss ich erst wieder auf den Button drücken. Geht das irgendwie automatisch, bzw einen befehl dafür?
Grüße
Einstellungen und Berechtigungen
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.