Verfasst am: 29.01.2013, 22:17
Titel: Zwei Data-Tips synchronisieren
Hallo,
ich möchte zwei Data-Tips in unterschiedlichen Axes synchronisieren (dieselben x-Werte). Im Anhang mein Code. Leider gelingt das nicht. Das zweite Data-Tip wird im ersten Axes dargestellt, wenn die Update-Funktion aufgerufen wird. Wie bekomme ich das hin?
Der gepostete Code ist umfangreich und man kann nicht auf Anhieb erkennen, was Du genau damit vorhast. Deshalb kann ich mit dieser Problembeschreibung nichts anfangen:
Zitat:
Das zweite Data-Tip wird im ersten Axes dargestellt, wenn die Update-Funktion aufgerufen wird
Kannst Du herausfinden in welcher Programmzeile der nicht gewünschte Effekt auftritt? Der Debugger ist dabei sicherlich hilfreich.
wenn man die entscheidenden Stellen betrachtet, ist der Code gar nicht so umfangreich. Die Funktion makedatatip.m braucht man nicht zu beachten. Diese erstellt per Code Data-Tips beliebiger Anzahl an einer beliebigen Stelle. Die Funktion labeldtips.m ist die von mir überschriebene Update-Funktion für die Data-Tips. Diese wird immer dann aufgerufen, wenn man die Position der Data-Tips per Maus verändert.
Die eigentliche Funktionalität ist im Callback des Pushbuttons Plot implementiert. Dort werden die beiden Plots und die beiden Data-Tips angelegt. Auf der Oberfläche steuere ich die Position der Data-Tips. Führt man das einmal aus, sieht das von mir geschilderte Verhalten. Die Data-Tips bewegen sich zwar synchron, aber im selben Axes oben. Das sollte so natürlich nicht sein.
Ich denke, ich könnte das Problem damit lösen, dass ich die Update-Funktion für jedes Data-Tip separat definiere. Das scheint indes in der aktuelle Ausbaustufe für alle Objekte vom Typ Data-Tip zu gelten. Außerdem könnte man vielleicht über die Eigenschaften Parent und Host was machen. Leider gelingt mir das bisher nicht.
wenn man die entscheidenden Stellen betrachtet, ist der Code gar nicht so umfangreich.
Das ist selbstverständlich. Zu bedenken belibt, dass Du weißt, welches die entscheidende Stelle ist, wir aber nicht. Natürlich kann ich Dein Programm durchlesen und irgendwann dieses Detail herausfinden, das wäre aber nicht effizient, da Du Dich doch bestens mit dem Code auskennst.
Zitat:
Die eigentliche Funktionalität ist im Callback des Pushbuttons Plot implementiert.
Dann würde ich empfehlen, genau diesen Code zu posten und das Drumherum stark zu reduzieren.
Zitat:
Die Data-Tips bewegen sich zwar synchron, aber im selben Axes oben. Das sollte so natürlich nicht sein.
Stattdessen soll dieses Verhalten auftreten:
Zitat:
ich möchte zwei Data-Tips in unterschiedlichen Axes synchronisieren (dieselben x-Werte)
Heißt dies, dass wenn Du einen Data-Tip im zweiten AXES bewegst, dass sich der entsprechende im ersten AXES-Objekt ebefalls bewegt bzw. bewegen soll? Wie ist dann festgelegt, welches der "entsprechende" ist? Und was geschieht nun genau? Statt des entsprechenden im andern AXES-Objekt bewegen sich alle Tips im angeklickten AXES-Objekt? Oder die Tips des anderen AXES werden in das aktivierte AXES gewegt?
Ein Posten im Forum hat meist dann Erfolg, wenn ein Leser in weniger als 60 Sekunden begreift, was das Problem ist. Wenn downloaden von 4 Files, eine viertel Stunde Code-Studium und erraten der eigentlichen Problem-Details notwendig ist, werden hilfreiche Antworten zunehmend unwahrscheinlich. Und so kann ich Dir zur Zeit nur diese unhilfreiche Un-Antwort senden.
ich sehe keine Möglichkeit den Code zu reduzieren, es ist bereits ein Minimalbeispiel. Ich habe zur Vereinfachung nun eine ZIP-Datei erstellt, so dass man sich das Projekt als Gesamtes herunterladen kann.
Zwei Data-Tips synchronisieren hinsichtlich ihrer x-Ausrichtung ist doch eine eindeutige Aussage?! Dann ist es egal, welches ich davon bewege, sie sollen sich stets synchron bewegen.
Den Code in den Thread kopieren siehst du wirklich als sinnvoll an? Man wird doch eher das Projekt bei sich auf dem Rechner testweise ausführen wollen, gerade weil es eine GUI ist. Oder sehe ich das falsch?
Hauptfunktion innerhalb der GUI. Hier werden die Plots und Data-Tips mit makedatatip erzeugt:
Code:
% --- Executes on button press in pushbutton_plot. function pushbutton_plot_Callback(hObject, eventdata, handles) % hObject handle to pushbutton_plot (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
Update-Funktion der Data-Tips. Wird aufgerufen, wenn man die Data-Tips bewegt:
Code:
function output_txt = labeldtips(obj,event_obj,hdt) % Display an observation's Y-data and label for a data tip % obj Currently not used (empty) % event_obj Handle to event object
dcs=hdt.DataCursors;
pos = get(event_obj,'Position');
set(dcs(1),'Position',pos);
output_txt{1} = ['X: ', num2str(pos(1))];
output_txt{2} = ['Y: ', num2str(pos(2))];
Sorry, wenn ich nochmal nachfrage.
Ich selbst lasse Dein Programm z.B. gar nicht laufen, da ich aktuell gar kein Matlab zur Verfügung habe. darum hatte ich gehofft, Du könntest uns vielleicht die Zeile zeigen, die die Datatips ins falsche AXES-Objekt bewegt. Eventuell könnte man ja Breakpoints setzen und bei schrittweisen durchlaufen lassen die verantwortliche Zeile finden. Ist es vielleicht:
?? Hier verstehe ich aber nicht, was genau in dcs gespeichert ist und ob es wirklich jeweils den dazugehörigen anderen Datatip enthält.
Es sieht so aus, also würden die Handles der Datatips dt1 und dt2 nirgends gespeichert, aber dann könntest Du ja auf den Datatip im anderen AXES überhaupt keinen Einfluß nehmen.
Also, wie gesagt, ich kann Dir leider nicht weiterhelfen. Aber ich habe es zumindest versucht. Hoffentlich ist jemand anderes erfolgreicher, oder Du bekommst mit dem Debugger doch die spezielle Zeile heraus, die wohl das Parent-Property des Tips ändert, obwohl sie nicht soll.
2. Das der Datatip in der falschen axes ist täuscht, er hat blos die falschen
y-Werte, die musst du auf SEINE Werte anpassen nicht auf die des anderen Datatips
recht herzlichen Dank für den Lösungsvorschlag! Ich werde das übermorgen testen können...
Grüße, Marc
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.