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

Aktuelle axes erstellen/ändern ohne cla zu verwenden

 

Teiwaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2014, 17:50     Titel: Aktuelle axes erstellen/ändern ohne cla zu verwenden
  Antworten mit Zitat      
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:

Code:
axes(handles.Bild_GUI)                  
imshow('Logo.png')

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?

Hoffe ihr könnt mir weiterhelfen!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.01.2014, 18:56     Titel: Re: Aktuelle axes erstellen/ändern ohne cla zu verwenden
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Teiwaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2014, 20:12     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke zuerst das du dich dem Thema angenommen hast Very Happy

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:

Code:
Bild = imread('Logo.png');
 image(Bild,'Parent',handles.Bild_GUI);
 box off;
 axis off;


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.

Gruß Teiwaz
 
Harald
Forum-Meister

Forum-Meister


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

mir zumindest ist es noch nicht wirklich klar.

Du kannst aber bei box und axis als erstes Argument das Koordinatensystem angeben, auf das die Befehle angewendet werden sollen, z.B.
Code:
axis(handles.Bild_GUI, 'off')


Sollte das nicht weiterhelfen, dann bitte Code zur Verfügung stellen, anhanddessen wir das gesamte Verhalten nachvollziehen können.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 04.01.2014, 23:22     Titel:
  Antworten mit Zitat      
Hallo Teiwaz,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Teiwaz

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.01.2014, 13:09     Titel:
  Antworten mit Zitat      
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:

Code:
Bild = imread('Oberflaeche_Bild.png');
 image(Bild,'Parent',handles.Bild_GUI);
 axis(handles.Bild_GUI, 'off');
 box (handles.Bild_GUI, 'off');


Über eine Schaltfläche wird eine Funktion mit mehreren Unterfunktionen aufgerufen die die eingelesenen Daten verrechnen.

Aufruf aus der GUI:

Code:
function Berechnung_Callback(hObject, eventdata, handles)

dateien =handles.dateien;
daten =handles.daten;
Temperatur =handles.T;

rechen_programm_par(daten,dateien,Temperatur)

handles.output = hObject;

guidata(hObject, handles);


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:

Code:
figure(1);

hold on;
plot(data(:,1),data(:,2),'Marker',Mod_plot.Marker{l},...
    'Color',col,'Tag',['{\it \beta} = ' Ausgabe ' ; {\it \DeltaA}= ' num2str(in.A_ges,4)...
    ' X/g'],'LineWidth',2);
plot(data(beg_index:end_index,1),base_line,'Marker','none','Color',col,'LineWidth',2);
xlabel('Zeit ${\it t}$ in s', 'interpreter', 'latex','FontSize',18);
ylabel('$\dot q$ in $W \over g$', 'interpreter', 'latex','FontSize',18)
grid on;
xlim([0 2100]);
ylim([-1 2]);
set(gca,'FontSize',16)
set(gca,'XGrid','on','LineWidth',2);
hand=get(gca,'Children');
j=1;

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
 
Neues Thema eröffnen Neue Antwort erstellen



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.