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

Plot Befehl löscht title und label handles

 

DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 27.02.2016, 11:49     Titel: Plot Befehl löscht title und label handles
  Antworten mit Zitat      
Hallo goMatlab Forum,

ich habe ein für mich unverständliches Problem beim Plotten. Zunächst lade ich nacheinander 2 Signale und plotte sie im Zeitbereich.

Code:

hLineS(1) = plot(axh,xVal{1,1},signal{1,1});
hold on
hLineS(2) = plot(axh,xVal{1,2},signal{1,2});
hold off
 


Nun wechsel ich in den Frequenzbereich und möchte z.B. das Betragsspektrum für beide Signal plotten.

Allerdings löscht mir folgender Befehl zum Plotten des Spektrum für Signal 1 die Title und x/ylabels.

Code:
hLineS(1) = plot(axh, FFT.fv, FFT.mag);
hold on
...

hLineS(2) = plot(axh, FFT.fv, FFT.mag);
 


Die title und label handles werden der Plotfunktion beim Aufruf übergeben.

Code:

[hLineS,axh] = Plot_function(axh,Data,hTitle,hXLabel,hYLabel,hZLabel,hColorbar,hColorbarLabel)
 


Vor dem Plot Befehl sind die handles noch vorhanden, nach dem Befehl

Code:

hTitle =

  handle to deleted Text
 


Habe ich nur 1 Signal und wechsel vom Zeit- in den Frequenzbereich ist alles ok, wobei auch hier der gleiche Plotbefehl ausgeführt wird. Wieso löscht er hier die handles nicht bzw. warum im oben genannten Fall?

Mein title und label handles lege ich in der MainGUIFcn an und formatiere (Schriftfarbe etc.) sie noch entsprechend an andere Stelle.

Code:

handles.hTitle = title(handles.axh,...
'SignalViewer - Darstellung von Signalen im Zeit- und Frequenzbereich',...
'Units','data',...
'Visible','on',...
'Tag','hTitle',...
'Interpreter','tex');
 


In der Plotfunktion werden dann nur die strings von title und x/y/zlabel verändert, was natürlich nicht mehr geht wenn die handles gelöscht sind.

Code:

% axes labels
set(hTitle,'String',Settings.TitleTime)
set(hXLabel,'String',Settings.xLabelTime)
set(hYLabel,'String',Settings.yLabelTime)
 


Normalerweise kommt das hold on nachdem das 1. Signal geplottet wurde um das 2. hinzuzufügen. Setze ich das hold on jedoch vor den Plotbefehl für Signal 1, werden die title und label handels nicht gelöscht. Also...

Code:

hold on
hLineS(1) = plot(axh, FFT.fv, FFT.mag);


So werden aber die axes children immer mehr, da durch das hold on das Löschen deaktiviert wird.

Bin für jede Hilfe dankbar!

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

warum das so ist, kann ich dir auch nicht sagen. Eine mögliche Abhilfe: "hold on" lassen und die bisherigen Linien löschen:

Code:
p = plot(rand(10,1));
xlabel('x')
hold on
delete(p)
p2 = plot(-10*rand(10,1));


Alternativ die Linien nicht neu zeichnen, sondern die Daten ersetzen:
Code:
p = plot(rand(10,1));
xlabel('x')
hold on
set(p, 'YData', -10*rand(10,1));


Grüße,
Harald

P.S.: bitte die Beispiele möglichst kompakt halten. Mir ist hier auch der Zusammenhang zwischen den 6 Code-Schnipseln nicht wirklich klar.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 27.02.2016, 20:58     Titel:
  Antworten mit Zitat      
Hallo Harald,

Zitat:
Eine mögliche Abhilfe: "hold on" lassen und die bisherigen Linien löschen:


Prinzipiell hätte ich damit kein Problem, jedoch führt das hold on dann bei der Darstellung des Spektrogramms in 3D zu einem fehlerhaften plot (siehe Bilder) Das Spektrogramm erstelle ich so.

Code:

% PLot Spektrogramm in 3D
hLineS(1) = surf(axh,t,fv,S);            

axis(axh,'vis3d')

% enable Rotation of 3D plot
rotate3d on
 


Es lässt sich dann zwar wieder in die Darstellung aus dem 1. Bild rotieren, aber die Größe des Plots ist nicht korrekt.

An die zweite Variante habe ich auch schon gedacht, aber noch nicht ausprobiert.

Zitat:
P.S.: bitte die Beispiele möglichst kompakt halten. Mir ist hier auch der Zusammenhang zwischen den 6 Code-Schnipseln nicht wirklich klar.


Das ist halt nicht so einfach wenn man es aus einem größeren Projekt heraustrennen muss. Evtl. hilft diese Erklärung etwas...

1. Code: zeigt wie ich 2 Signale im Zeitbereich dargestellt werden
2. Code: wie die beiden Zeitsignale nach der FFT als Betragsspektrum dargestellt werden
3. Code: Sollte nur verdeutlich das die title und handle labels der Plotfunktion übergeben werden. Innerhalb der Plotfunktion werden also keine labels neu erstellt, sondern nur die vorhanden lediglich angepasst.l
4. Code: Zeigt wie ich in der Hauptfunktion der GUI das Title handle erzeuge, welches dann der Plotfunktion übergeben wird.
5. Code: Zeigt wie innerhalb der Plotfunktion der Text des title geändert wird. Mehr passiert mit den handles innerhalb der Plotfunktion nämlich nicht.



Ich werde deinen 2 Vorschlga mal testen. Falls ich nicht weiter komme, werde ich versuchen ein Beispiel zu erstellen, welches den Fehler beinhaltet.

Aber schon mal vielen Dank für deine Hilfe!

Gruß DSP

Spektrogramm_fehlerhaft.png
 Beschreibung:

Download
 Dateiname:  Spektrogramm_fehlerhaft.png
 Dateigröße:  107.62 KB
 Heruntergeladen:  267 mal
Spektrogramm_ok.png
 Beschreibung:

Download
 Dateiname:  Spektrogramm_ok.png
 Dateigröße:  129.72 KB
 Heruntergeladen:  276 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.02.2016, 16:52     Titel:
  Antworten mit Zitat      
Hallo,

leider bringt mich die Variante über
Code:
set('XData',...,'YData',...)


auch nicht wirklich weiter. So sieht meine CreateFcn von axes aus:

Code:

 % initial Plot on Signalviewer startup - show some Informations
    function PlotInit_CreateFcn(hObject, ~)
        % Init graph        
        handles.Data.hLineS(1) = plot(hObject,1:10, ones(1,10));
        hold(hObject,'on')
        handles.Data.hLineS(2) = plot(hObject,1:10, ones(1,10));
        handles.Data.hLineS(3) = plot(hObject,1:10, ones(1,10));
        handles.Data.hLineS(4) = plot(hObject,1:10, ones(1,10));
        hold(hObject,'off')
        set(hObject,'XLim',[1 10],'YLim', [0 1])  
       
        % show no signals
        set(handles.Data.hLineS(1),'Visible','off')
        set(handles.Data.hLineS(2),'Visible','off')
        set(handles.Data.hLineS(3),'Visible','off')
        set(handles.Data.hLineS(4),'Visible','off')
       
        % show information
        info = sprintf('Information:\n\n');
       
        handles.Data.hInfoText = text(2,0.8,info,...
                                    'Tag','InfoText',...
                                    'FontSize',12,...
                                    'FontWeight','bold',...
                                    'Color',handles.Data.Color.FontColor,...                                    'BackgroundColor',handles.Data.Color.BackgroundGrey);                              
       
    end
 


Damit kann ich jetzt die LineHandles hLineS nehmen um die x- und y-Daten zu ändern.

Allerdings nutze ich auch die Funktionen plotyy zur Darstellung von Betrag und Phase des Frequenzspektrums sowie imagesc und surf für die Darstellung des Spektrogramms in 2D und 3D. Benötige ich also z.B. die plotyy Funktion, müsste ich erst wieder einen neuen leeren Plot erzeugen:

Code:

function PlotYYInit
        delete(handles.Data.hLineS)
        % Init graph  
        hold(handles.axh,'on')
        [handles.Data.axhYY, handles.Data.hLineS(1), handles.Data.hLineS(3)] = plotyy(handles.axh,1:10,ones(1,10),1:10, ones(1,10));
        [handles.Data.axhYY, handles.Data.hLineS(2), handles.Data.hLineS(4)] = plotyy(handles.axh,1:10,ones(1,10),1:10, ones(1,10));
        hold(handles.axh,'off')
        set(handles.axh,'XLim',[1 10],'YLim', [0 1])  
       
        % show no signals
        set(handles.Data.hLineS(1),'Visible','off')
        set(handles.Data.hLineS(2),'Visible','off')
        set(handles.Data.hLineS(3),'Visible','off')
        set(handles.Data.hLineS(4),'Visible','off')
    end
 


Jetzt hänge ich aber hier wieder mit hold on, da ansonsten beim 1. Plotbefehl die label handles gelöscht werden. Und nun bin ich ehrlich gesagt etwas ratlos wie ich das Problem lösen kann.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was spricht denn eigentlich dagegen, die Labels einfach nochmal zu erzeugen?
Wenn du das in eine Funktion auslagerst, ist der Aufruf eine Zeile.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Themenstarter

Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 28.02.2016, 17:52     Titel:
  Antworten mit Zitat      
Hallo Harald,

da wird mir wohl nichts anderes übrig bleiben. Ich finde es halt etwas unsinnig die Labels neu zu erzeugen, wenn ich nur den String ändern möchte.

Ich hatte gehofft es gibt ein Lösung/Erklärung warum die Labels bei einem plot Befehl gelöscht werden.

Gruß DSP
Private Nachricht senden Benutzer-Profile anzeigen
 
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.