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

PDF-Export eines axes

 

MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 03.11.2012, 10:21     Titel: PDF-Export eines axes
  Antworten mit Zitat      
Hallo,

mit der Version 2011a, die ich testweise nutze, sind Fehler im Export meiner Grafik aufgetaucht. Vorher war die Grafik zentriert und füllte das Dokument aus, jetzt schaut es aus wie im folgenden Upload. Woran liegt das?

Hier auch der entsprechenden Code:
Code:

function uipushtool1_ClickedCallback(hObject, eventdata, handles)
% hObject    handle to uipushtool1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% fig=figure;
% set(handles.Approximation,'CurrentAxes',handles.axesapprox);
% fig=gca;

[FileName,PathName] = uiputfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';...
          '*.*','All Files' },'Save Image',...
          [pwd,'\newfile.pdf']);

% pos=get(gca, 'Position');
% set(gca, 'Position', [pos(1) pos(2) .9 .9]);
fh = isolate_axes(handles.axesapprox, 0);
saveas(fh,[PathName,FileName]);

 


Grüße, Marc

newfile.pdf
 Beschreibung:

Download
 Dateiname:  newfile.pdf
 Dateigröße:  5.01 KB
 Heruntergeladen:  421 mal
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.11.2012, 15:32     Titel: Re: PDF-Export eines axes
  Antworten mit Zitat      
Hallo MaFam,

Was genau heißt "vorher" und was verbirgt sich hinter "isolate_axes"?
Sind die Default-Eigenschaften der Figure oder der Axes geändert worden?

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

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 04.11.2012, 16:53     Titel:
  Antworten mit Zitat      
Hallo Jan,

vorher siehe Anhang mit Matlab 2009b. Am Code habe ich nichts geändert.

Grüße, Marc

newfile.pdf
 Beschreibung:

Download
 Dateiname:  newfile.pdf
 Dateigröße:  4.59 KB
 Heruntergeladen:  415 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 04.11.2012, 19:31     Titel:
  Antworten mit Zitat      
Wenn ich die Zeile
Code:

fh = isolate_axes(handles.axesapprox, 0);
 

nicht verwende, wird meine ganze GUI abgebildet. Daher isoliere ich das axes handle.

Auch das Setzen von 'Position' hat keinerlei Auswirkung. Ich habe denselben Code gerade nochmal testweise mit 2009b laufen lassen. Alles prima...
So allmählich gehen mir die Ideen aus.
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: 04.11.2012, 19:36     Titel:
  Antworten mit Zitat      
Hallo,

um dir weiterhelfen zu können, müsste man den Code von "isolate_axes" kennen. Eine verbale Beschreibung hilft zumindest mir nicht weiter.

Am einfachsten ist es immer, wenn man das Problem selbst nachstellen kann. Das ist bis jetzt leider nicht möglich.

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

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 04.11.2012, 19:43     Titel:
  Antworten mit Zitat      
Mit
Code:

print(fh, '-depsc', '-r600', 'test.eps')
 

das gleiche Problem.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 04.11.2012, 19:46     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:

...um dir weiterhelfen zu können, müsste man den Code von "isolate_axes" kennen.


Code:

%ISOLATE_AXES Isolate the specified axes in a figure on their own
%
% Examples:
%   fh = isolate_axes(ah)
%   fh = isolate_axes(ah, vis)
%
% This function will create a new figure containing the axes specified, and
% also their associated legends and colorbars. The axes specified must all
% be in the same figure, but they will generally only be a subset of the
% axes in the figure.
%
% IN:
%    ah - An array of axes handles, which must come from the same figure.
%    vis - A boolean indicating whether the new figure should be visible.
%          Default: false.
%
% OUT:
%    fh - The handle of the created figure.

% Copyright (C) Oliver Woodford 2011-2012

% Thank you to Rosella Blatt for reporting a bug to do with axes in GUIs
% 16/3/2012 Moved copyfig to its own function. Thanks to Bob Fratantonio
% for pointing out that the function is also used in export_fig.m.

function fh = isolate_axes(ah, vis)
% Make sure we have an array of handles
if ~all(ishandle(ah))
    error('ah must be an array of handles');
end
% Check that the handles are all for axes, and are all in the same figure
fh = ancestor(ah(1), 'figure');
nAx = numel(ah);
for a = 1:nAx
    if ~strcmp(get(ah(a), 'Type'), 'axes')
        error('All handles must be axes handles.');
    end
    if ~isequal(ancestor(ah(a), 'figure'), fh)
        error('Axes must all come from the same figure.');
    end
end
% Tag the axes so we can find them in the copy
old_tag = get(ah, 'Tag');
if nAx == 1
    old_tag = {old_tag};
end
set(ah, 'Tag', 'ObjectToCopy');
% Create a new figure exactly the same as the old one
fh = copyfig(fh); %copyobj(fh, 0);

% Benutzerdefinierte Anpassung:
% -------------------------------------------------------------------------
posfig=get(fh, 'Position');
set(fh, 'Position', [posfig(1), posfig(2), 1/2*posfig(3), posfig(4)]);
% -------------------------------------------------------------------------

if nargin < 2 || ~vis
    set(fh, 'Visible', 'off');
end
% Reset the axes tags
for a = 1:nAx
    set(ah(a), 'Tag', old_tag{a});
end
% Find the objects to save
ah = findall(fh, 'Tag', 'ObjectToCopy');
if numel(ah) ~= nAx
    close(fh);
    error('Incorrect number of axes found.');
end
% Set the axes tags to what they should be
for a = 1:nAx
    set(ah(a), 'Tag', old_tag{a});
   
    % Benutzerdefinierte Anpassung:
    % ---------------------------------------------------------------------
    posaxes=get(ah(a), 'Position');
    set(ah(a), 'Position', [0.05 ,posaxes(2),2*posaxes(3),posaxes(4)]);
    % ---------------------------------------------------------------------
   
end
% Keep any legends and colorbars which overlap the subplots
lh = findall(fh, 'Type', 'axes', '-and', {'Tag', 'legend', '-or', 'Tag', 'Colorbar'});
nLeg = numel(lh);
if nLeg > 0
    ax_pos = get(ah, 'OuterPosition');
    if nAx > 1
        ax_pos = cell2mat(ax_pos(:));
    end
    ax_pos(:,3:4) = ax_pos(:,3:4) + ax_pos(:,1:2);
    leg_pos = get(lh, 'OuterPosition');
    if nLeg > 1;
        leg_pos = cell2mat(leg_pos);
    end
    leg_pos(:,3:4) = leg_pos(:,3:4) + leg_pos(:,1:2);
    for a = 1:nAx
            % Overlap test
            ah = [ah; lh(leg_pos(:,1) < ax_pos(a,3) & leg_pos(:,2) < ax_pos(a,4) &...
                         leg_pos(:,3) > ax_pos(a,1) & leg_pos(:,4) > ax_pos(a,2))];
    end
end
% Get all the objects in the figure
axs = findall(fh);
% Delete everything except for the input axes and associated items
delete(axs(~ismember(axs, [ah; allchildren(ah); allancestors(ah)])));
return

function ah = allchildren(ah)
ah = allchild(ah);
if iscell(ah)
    ah = cell2mat(ah);
end
ah = ah(:);
return

function ph = allancestors(ah)
ph = [];
for a = 1:numel(ah)
    h = get(ah(a), 'parent');
    while h ~= 0
        ph = [ph; h];
        h = get(h, 'parent');
    end
end
return
 
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.11.2012, 21:49     Titel: Re: PDF-Export eines axes
  Antworten mit Zitat      
Hallo MaFam,

Jetzt kennen wir zwar den Inhalt von ISOLATE_AXES. Aber der darin enthaltene Befehl COPYFIG ist immer noch unbekannt. Bitte erkläre alle relevanten Funktionen, die Du nutzt. Wenn Du Hilfe benötigst, ist es nicht sinnvoll, uns im Dunkeln tappen zu lassen.

Ich frage nochmal:
Sind die Default-Eigenschaften der Figure oder der Axes geändert worden?
Code:

Insbesondere diese Eigenschaften sind von Belang:
PaperUnits
PaperOrientation
PaperPosition
PaperPositionMode
PaperSize
PaperType
Die Default-Properties werden z.B. in "matlabrc.m" eingestellt.

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

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 05.11.2012, 08:37     Titel:
  Antworten mit Zitat      
Hallo zusammen,

vielen Dank zunächst für eure Hilfsbereitschaft. Bitte nicht auf die Funktion ISOLATE_AXES fokussieren.

Man kann ebenso gut die Zeile
Code:

print(handles.axesapprox, '-depsc', '-r600', 'test.eps')
 

verwenden, der Effekt/Fehler (Grafik viel zu klein und unten links) ist derselbe. Die Default-Properties habe ich nicht angerührt, aber ich schaue mir die matlabrc.m heute Abend an.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 05.11.2012, 20:33     Titel:
  Antworten mit Zitat      
Ich habe die Properties abgefragt:

PaperUnits = centimeters
PaperOrientation = portrait
PaperPosition = [0.25 2.5 8 6]
PaperPositionMode = manual
PaperSize = [20.984 29.6774]
PaperType = A4

Dieselben unter 2009b

PaperUnits = centimeters
PaperOrientation = portrait
PaperPosition = [0.25 2.5 8 6]
PaperPositionMode = manual
PaperSize = [20.984 29.6774]
PaperType = A4
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 07.11.2012, 21:47     Titel:
  Antworten mit Zitat      
Mir war das jetzt zu doof, zumal ich die Grafiken dringend brauchte, habe ich jetzt 2011 wieder runtergeschmissen...
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.