Aktuelle axes erstellen/ändern ohne cla zu verwenden
Teiwaz
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 03.01.2014, 17:50
Titel: Aktuelle axes erstellen/ändern ohne cla zu verwenden
Hallo Matlab-Gemeinde,
ich habe ein Problem bei meinem Programm bzw. mit dem Verständnis von axes.
Ich habe ein GUI mit dem Daten eingelesen werden und nach Betätigung einer Schaltfläche einige Scripte ausgeführt werden, die verschiedene Berechnungen durchführen und die Ergebnisse plotten.
Nun habe ich in meinem GUI ein Logo eingefügt um es anschaulicher zu gestalten. Das Logo habe ich mit folgenden Code erstellt:
Wenn ich nun mein GUI öffne, Daten einlese und anschließend meine Berechnung starten lasse wird das Logo in der 1. figure meiner plots kurz dargestellt und anschließend bekomme ich nur eine schmale Linie mit den Plots
angezeigt. Das sollte eigentlich nicht passieren und die figure sollte eigentlich so aussehen.
Wie kann ich dafür sorgen, dass mir das Logo aus dem GUI nicht immer das figure verhunzt?
Verfasst am: 04.01.2014, 18:56
Titel: Re: Aktuelle axes erstellen/ändern ohne cla zu verwenden
Hallo Teiwaz,
Es ist schwierig die Ursache der Probleme zu raten, wenn Du nur zwei Zeilen Code postest. Ich kann auf den Bilden nicht wirklich erkennen, was welche Unterschiede macht. Wo ist denn das Logo?
Zitat:
Wenn ich nun mein GUI öffne, Daten einlese und anschließend meine Berechnung starten lasse wird das Logo in der 1. figure meiner plots kurz dargestellt und anschließend bekomme ich nur eine schmale Linie mit den Plots
Dann setze doch mal einen Breakpoint und lasse Matlab Zeile für Zeile durch den Code gehen um herauszufinden, wo genau die nicht gewünschten Effekte auftreten.
Ich rate mal, dass Du einen Plot-Befehl verwendest und in das AXES-Objekt zeichnest, das für das Logo gedacht war. Stattdessen kannst Du im PLOT-Befehl aber die Property "Parent" setzen und dort den Handle des AXES-Objektes angeben, in das gezeichnet werden soll.
Gruß, Jan
Teiwaz
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 04.01.2014, 20:12
Titel:
Hallo Jan,
danke zuerst das du dich dem Thema angenommen hast
Bin bei meinem Problem weitergekommen. Ich hatte der axes kein parent zugewiesen weshalb die nächste figure als parent herhalten musste und so scheint es, dass die axes Eigenschaften mit Größe, Grid etc. auf diese angewandt wurde.
Mein neuer Code um das Logo in meiner GUI darzustellen:
Leider besteht noch immer ein Problem. Wie im Code zu sehen entferne ich die Achsen und den Rahmen. Wenn ich nun mein Programm ausführe werden in der zuerst aufgerufenen figure auch kein Rahmen und keine Achsen geplottet.
Demzufolge wird der axes handle aus der GUI auch als axes handle für meine figure genutzt. Wie kann ich das unterbinden bzw. wie kann man einer figure eine eigenes axes handle zuweisen?
Hoffe das ich mich diesmal verständlicher machen konnte.
Man kann einer Figure keinen AXES-Handle zuweisen.
Zitat:
Wenn ich nun mein Programm ausführe werden in der zuerst aufgerufenen figure auch kein Rahmen und keine Achsen geplottet.
Die Beschreibung als Text erlaubt es nicht herauszufunden, was wo in Deinem Code geschieht.
Zitat:
Demzufolge wird der axes handle aus der GUI auch als axes handle für meine figure genutzt.
Das verstehe ich nicht. Bitte poste den entsprechenden Code.
Gruß, Jan
Teiwaz
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.01.2014, 13:09
Titel:
Hallo Matlab-Forum,
danke für die schnellen Antworten von Jan und Harald. Wenn ich mich auch unverständlich ausgedrückt habe so ist doch die Lösung bei rausgekommen. Haralds Tipp war goldrichtig. Danke dafür!
Der Vollständigkeit halber und mit einer, der Neugier geschuldeten Folgefrage, hier noch die relevanten Code-Teile und Infos.
Eine GUI zur Eingabe von Datensätzen hat ein Logo damit die Oberfläche nicht so leer aussieht. Dieses Logo wurde realisiert mit:
Die Berechnung ist für das Problem nicht relevant und auch recht lang deshalb soll auf den Code hier verzichtet werden.
Nachdem alle Berechnungen ausgeführt wurden wird in der Funktion rechen_programm_par eine Unterfunktion aufgerufen in der alle figures und plot-Anweisungen stehen. Als Bsp. hier der Code für die erste figure bei der das Problem mit der fehlerhaften Darstellung aufgetreten war:
for i=1:size(hand,1) if ~strcmp(get(hand(i),'Tag'),'')
str_cell{j}=char(get(hand(i),'Tag'));
hand1(j)=hand(i);
j=j+1;
end end
legend(hand1,str_cell,'Location','NorthEast','LineWidth',2);
h1=fill([data(beg_index:end_index,1);flipdim(data(beg_index:end_index,1),1)], [base_line';flipdim(data(beg_index:end_index,2),1)],'k','Edgecolor', 'none'); %Füllt die Fläche unter der Kurve aus
set(h1,'FaceAlpha',0.3,'FaceColor',col);
hold off;
In der GUI hatte ich ja eine axes Objekt auf der Oberfläche gesetzt und mit dem Tag "Bild_GUI" versehen. Im Code für die Darstellung der figure 1 habe ich kein Objekt das ich benennen und ansprechen könnte. Wie kann man die Beschreibungen wie "grid on" etc. der figure einem handle zuweisen das ich es wie in der GUI ansprechen kann?
Viele Grüße
Teiwaz
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.