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.
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.
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....
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');
%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',[155 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',[155 axes_pos(3)+30 axes_pos(4)+10]);
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
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.