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

Plotyy abspeichern

 

squavel
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2012, 15:43     Titel: Plotyy abspeichern
  Antworten mit Zitat      
Hallo Matlab-Gemeinde,

es ist mein erster Beitrag, deshalb geht nicht zu hart mit mir um.

Folgendes Problem:

ich habe eine GUI erstellt und möchte dort nun meinen plotyy Graphen abspeichern.

Normalerweise übergibt man ja die axes zum abspeichern, jedoch speichert er nur einen der beiden Graphen ab, der andere geht einfach verloren.

Ich weiß, dass es an der Funktion plotyy liegt, das er dort irgendwie zwei AX erstellt, die beide y-achsen darstellen. Da aber die axes aber irgendwie nur einen der beiden y-achsen beinhaltet geht der andere verloren.

Ich hoffe ich versteht mein problem. Sonst schreib ich nochmal was.

gruß
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: 31.01.2012, 20:47     Titel: Re: Plotyy abspeichern
  Antworten mit Zitat      
Hallo squavel,

Herzlich Willkommen im Forum!

Mit welchem Befehl speicherst Du das Diagram und in welchem Format?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
squavel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2012, 23:45     Titel:
  Antworten mit Zitat      
Hey,

also ich will jetzt mal konkreter werden, es ist mir bis jetzt nichts gelungen in der Hinsicht.

Wie gesagt ich erstelle vorerst eine GUI mit axes1 als Plot Fenster (es werden noch weitere folgen, dehalb würde ich das gerne verstehen...)

Folgender Befehl plottet nun in das Fenster.
Code:

[AX,H1,H2] = plotyy(data.T(:),data.Fx(:),data.T(:),data.Fz(:),'plot');
 


Anschließend soll es die Möglichkeit geben dies abzuspeichern, folgende vorgefertigte Funktion benutze ich nun.

Code:

%Hierbei wir axesObject in der Funktion mitgegeben(ich dachte axes1 %würde reichen)

axesObject2 = copyobj(axesObject,newFig);

%anschließend soll mit

saveas(newFig,fullfile(pathname, filename))

%abgespeichert werden
 


Soweit ich das sehe, erstellt plotyy AX(1) und AX(2). durch das mitgeben der axes1 wird jedoch beim copyobj nur das AX(1) kopiert.

Ich verstehe nicht warum das so geschieht, warum beinhaltet axes1 nicht die kompletten Informationen, warum ist dieser Wert nur ein double?

Bitte um Hilfe, ich möchte später auch neue Fenster öffnen mit vielen Plot axes und diese Plots auch abspeichern.

Gruß

squavel
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: 01.02.2012, 19:04     Titel:
  Antworten mit Zitat      
Hallo squavel,

Bitte erkläre, in welchem Format Du die Grafik abspeicherst. Dies ist in der Variable "filename" als Extension enthalten, wir kennen aber den File-Namen nicht.

PLOTYY zeichnet zwei AXES Objekte, wobei eines einen durchsichtigen Hintergrund hat und eines die Y-Achsen-Beschriftunbg an die linke Seite schreibt.
Die "vorgefertigte Funktion" zum abspeichern eines Diagramms ist merkwürdig. Wieso kopierst Du die Diagramme zuerst in eine neue Figure? Kann man sie nicht direkt speichern?
Und was ist "axesObejct"? Ich vermute es ist einer der AXES-Handles, die von PLOTYY in der Variablen AX zurückgegeben werden.
Was ein Handle ist, wurde in diesem Forum oft besprochen und es wird auf in der Dokumentation erklärt. Alle Grafik-Objekte haben eine eindeutige Nummer, eine Art Identifikator, mit dem sie angesprochen werden können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
squavel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2012, 00:53     Titel:
  Antworten mit Zitat      
Das Format kann der Nutzer vorher bestimmen, .fig, .bmp oder .emf, das ist richtig das kommt beim filename mit.

Man kann natürlich direkt abspeichern, aber das Ergebnis kann man dann vergessen. Ich kopiere es vorher in ein neues Figure Fenster, um es vorerst auszurichten.

Mit axesObject würde ich gerne den Plot mitgeben, der gespeichert werden soll. Hier übergebe ich im Moment nur handle.axes1 mit, da es der einizge Plot ist und genau hier wird wohl auch das Problem liegen. Es handelt sich hierbei nicht direkt um die AX vom plotyy, es ist lediglich das Plot fenster des GUI.

Ja, das mit den eindeutigen Nummern habe ich auch schon festgestellt.

Hierbei trägt ja auch handles.axes1 und das AX(1) denselben double-wert und wird dementsprechend auch abgespeichert, aber das AX(2) geht verloren, jetzt weiß ich nicht, wie ich das ordentlich geschrieben bekomme....

Danke für deine Hilfe schon mal im.

Gruß

squavel
Private Nachricht senden Benutzer-Profile anzeigen
 
squavel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 30.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2012, 22:04     Titel:
  Antworten mit Zitat      
Hallo liebe Matlab Gemeinde,

nun habe ich es geschafft mit der Hilfe, das jedes Objekt seine eigene Nummer hat, meinen plotyy abzuspeichern.

Nun entsteht ein komisches Problem, wo mir leider die Ideen ausgegangen sind, wieso es dazu kommt.

Hier nochmal meine Funktion zum abspeichern:

Code:

%function to save plots within a GUI
 
function savePlotWithinGUI(axesObject,legendObject)
%this function takes in two arguments
%axesObject is the axes object that will be saved (required input)
%legendObject is the legend object that will be saved (optional input)

%stores savepath for the phase plot
[filename, pathname] = uiputfile({ '*.bmp','Bitmap (*.bmp)';...
   '*.emf','Enhanced Meta File (*.emf)'; '*.fig','Figure (*.fig)'}, ...
   'Save picture as','default');

%if user cancels save command, nothing happens
if isequal(filename,0) || isequal(pathname,0)
   return
end
%create a new figure
newFig = figure;

%get the units and position of the axes object
axes_units = get(axesObject(1),'Units');
axes_pos = get(axesObject(1),'Position');

for a = 1:length(axesObject)
    %copies axesObject onto new figure
    axesObject2 = copyobj(axesObject(a),newFig);

    %realign the axes object on the new figure
    set(axesObject2,'Units',axes_units);
    set(axesObject2,'Position',[15 5 axes_pos(3) axes_pos(4)]);

    %if a legendObject was passed to this function . . .
    if (exist('legendObject'))

        %get the units and position of the legend object
        legend_units = get(legendObject,'Units');
        legend_pos = get(legendObject,'Position');

        %copies the legend onto the the new figure
        legendObject2 = copyobj(legendObject,newFig);

        %realign the legend object on the new figure
        set(legendObject2,'Units',legend_units);
        set(legendObject2,'Position',[15-axes_pos(1)+legend_pos(1) 5-axes_pos(2)+legend_pos(2) legend_pos(3) legend_pos(4)] );
    end
end

%adjusts the new figure accordingly
set(newFig,'Units',axes_units);
set(newFig,'Position',[15 5 axes_pos(3)+30 axes_pos(4)+10]);
   
%saves the plot
saveas(newFig,fullfile(pathname, filename))

%closes the figure
close(newFig)
 


Nun liegt das Problem genau in der letzten Zeile close(newFig). Hierbei will ich nun das zwischenfenster, wohin ich meine zwei Graphen rüberkopiere wieder schließen. ABER Matlab schließt nicht nur dieses Fenster, sondern löscht den zweiten Graphen aus meinem Plot.

Ich weiß jetzt nicht inwiefern diese beiden Fenster miteinander zusammenhängen...

Natürlich könnte ich im Anschluss einfach alles nochmal Plotten lassen, jedoch dauert das sehr lange, da ich sehr viele Werte zum Plotten habe(geht das irgendwie schneller???)

Gruß!

squavel
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.