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

Figure in pdf-Format speichern

 

mel2503
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 03.01.08
Wohnort: ---
Version: 7
     Beitrag Verfasst am: 10.04.2008, 08:31     Titel: Figure in pdf-Format speichern
  Antworten mit Zitat      
Hallo,
ich habe mal wieder ein kleines Problem.

also ich erstelle ein Figure mit einem Subplot und lasse das dann als PDF speichern. Das Ganze erfolgt über ein kleines GUI und wird dafür verwendet um von Messreihen ein Formular zu erstellen. Soweit funktioniert das ganze auch. Aber wenn ich eine andere messreihe habe, dann überschreibt er im pdf nur die Werte und löscht die anderen nicht.
ich denke, dass die figure irgendwie geschlossen werden müßte oder so. aber ich weiß nicht genau wie.
Hier der Teil meines Programm wo die pdf erstellt wird!
Code:
function pdf_Callback(hObject, eventdata, handles)
warning off
% messnr aus dem GUI auslesen
messnr_ = get(handles.edit1,'String');
messnr=str2double(messnr_);
path='E:\Matlab_absor\Formulare\';
los=[path messnr_ '.pdf'];
% die PDF löschen
delete(los);
% Eigenschaften der Messung auslesen
[datum,probennr,zusatz]=messeigenschaften(messnr);
[temp,luft]=temp_luft(datum);
[A,d_loch,a_loch,h_platte,material,a_platte]=probe(probennr)
% Absorptionsgrad bestimmen
[f,alpha] = absorptionsgrad(messnr,A);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Formular erstellen
h=figure(2);
% Größe festlegen
set(h,'PaperPosition',[3 2 16 26],...
'PaperSize',[20.98 29.68],'PaperType','a4letter');
% es soll keine graphik erstellt werden
set(h,'visible','off ');


% subplot 1: Schallabsorptionsgrad
subplot(3,1,1);
%     Kurve zeichnen
    h=semilogx(f,alpha,'r-d');
%     Größe festlegen
    set(gca,'Units','centimeters','Position',[1.5 17 10.7 6]);
    hold on; grid on;
%     Linien sicker zeichnen
    set(h,'linewidth',1.5)
%     Beschriftung der Graphik
    xlabel('Frequenz [Hz]','FontSize',11);
    ylabel('Schallabsorptionsgrad \alpha','FontSize',11);
    title(['Schallabsorptionsgrad \alpha'],'FontSize',16)
%     Beschriftung und Skalierung der x-Achse
    set(gca, 'XTick',[0,400,1000,2000,4000,6000,8000], ...
    'XTickLabel',{'0','400','1000','2000','4000','6000','8000'})
%     Skalierung der Achsen
    axis([ 0,8000,0, 1.1])
%     Text einfügen
    text(400,1.5,['Schallabsorptionsgrad von Probe ', num2str(probennr)],'FontSize',20);
    text(900,1.38,['Messung ',num2str(messnr),' vom ',num2str(datum)], 'FontSize' ,14);
    text(8500,1.,[ 'Temperatur:']);text(15000, 1,[num2str(temp) '° C'],'FontSize',11);
    text(8500,0.92,[ 'Luftfeuchte:']);text(15000,0.92,[num2str(luft) ' %' ],'FontSize',11);
    text(8500,.84,[ 'Probenr:']);text(15000,.84,[num2str(probennr)],'FontSize',11);
    text(8500,.76,[ 'Zusatz:']);text(8500,.68,[zusatz],'FontSize',11);
% subplot 2: Tabelle
subplot(3,1,2)
%     Größe festlegen
    set(gca,'Units','centimeters','Position',[0 13.5 16 2]);
%     Linien der Tabelle ziehen
    x=[0:12/15:12;0:12/15:12]; y=[0;1.2];
    x1=[0 12];y1=[0 0];    x2=[0 12];y2=[0.6 0.6]; x3=[0 12];y3=[1.2 1.2];
    plot(x,y,'k',x1,y1,'k',x2,y2,'k',x3,y3,'k');
    axis off; axis([ 0,12,0, 1.2])
%     Beschriftung Tabellenkopf
    text(.35,.85, ['f'],'FontSize',11);text(.3,.3,['\alpha'],'FontSize',11+2);
%     Tabelle füllen
    pos_t=0.95;
    alpha=alpha.*100;
    alpha=round(alpha);
    alpha=alpha./100;
    for i=1:length(f)
        alpha1=num2str(alpha(i));
        f1=num2str(f(i));        
        text(pos_t,.85, f1,'FontSize',11);text(pos_t+0.05,.3, alpha1 ,'FontSize',11);
        if f(i) == 800
            pos_t=pos_t+0.75;
        else
            pos_t=pos_t+0.8;
        end
    end
% subplot 3: Probenaufbau
subplot(3,1,3)
%     Größe festlegen
    set(gca,'Units','centimeters','Position',[0 3.5 8 8]);
%     Linien ziehen
    v=[0 10];     w=[0 0];    w1=[2*1 2*1;2*2 2*2;2*3 2*3;2*4 2*4;2*5 2*5 ];
    hold on;  
%     Boden zeichnen
    plot(v,w,'k','linewidth',1.7);    plot(v,w1,'k');
%     Achsen werden nicht gezeichnet und Skalierung festlegen
    axis off;     axis([ 0,16,-2, 2*5]);
%     einzelnen Ebenen zeichnen
    stemp=0:0.3:9.9;
    for i=1:33
        stemp1(i,:)=[stemp(i) stemp(i+1)];
    end
    stemp2=[0;-.3 ];
    plot(stemp1,stemp2,'k');

    w= [w ; w1];
    q=1;p=2;
%     Beschriftung
    text(8,11,'Probenaufbau','FontSize',16);
    text(3.5,-.6,'Rückwand','FontSize',11)

    for i=1:length(w(:,1))-1
%         Pfeifen zeichnen im Probenaufbau
        plot([1 1],[w(i)+0.16 w(i)+0.16],'kv','MarkerSize',5.5);
        plot([1 1],[w(i+1)-0.16 w(i+1)-0.16],'k^','MarkerSize',5.5);
        plot([1 1],[w(i)+0.16 w(i+1)-0.16],'k')
    end
%     Beschriftung des Probenausbaus
    for j=1:length(d_loch)
%         num2str(d_loch(j))
        if a_platte(j) >=0    
            text(1.2,q,['a_{Platte}= ' num2str(a_platte(j)) ' mm '],'FontSize',11);
            text(10.2,p,material(j),'FontSize',11);
            if d_loch(j)==0
               text(10.2,q, ['h_{Platte}= ', num2str(h_platte(j)) ' mm ' ] ,'FontSize',11);  
            else
                text(10.2,q, ['d_{Loch}= ' num2str(d_loch(j)) 'mm; a_{Loch}= ', num2str(a_loch(j)) ' mm, h_{Platte}= ', num2str(h_platte(j)) ' mm ' ] ,'FontSize',11);
            end
            p=p+2;q=q+2;  
         end
    end
% die PDF zeichnen

file=[num2str(messnr) '.pdf'];
print('-f2', '-dpdf', [path file]);
% figure schließen

close(figure);




Viele Grüße und danke schon mal
Melanie

Hi, ich habe mal die Quote-Umgebung durch die Code-Umgebung ersetzt. Hast Dich sicher verklickt. Smile nschlange

1.pdf
 Beschreibung:
Bei dem ersten subplot (s.Anhang) sieht man am rand noch den vorigen Plot. Komischerweiße ist bei letzten subplot das Problem nicht, bei einer anderen Messreihe stehen dort ganz andere Werte

Download
 Dateiname:  1.pdf
 Dateigröße:  6.77 KB
 Heruntergeladen:  1473 mal
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 10.04.2008, 09:29     Titel:
  Antworten mit Zitat      
Hallo Melanie,

so ganz weiß ich zwar nicht woran es liegt, aber probier doch mal in der vorletzten Zeile deines Codes folgendes:
Code:
print(h,'-f2', '-dpdf', [path file]); % du hast die figure ja unter h abgespeichert


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
mel2503
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 03.01.08
Wohnort: ---
Version: 7
     Beitrag Verfasst am: 10.04.2008, 09:37     Titel:
  Antworten mit Zitat      
irgendwie funktioniert das nicht,
es kommt folgende fehlermeldung:

??? Error using ==> inputcheck>LocalCheckHandles at 196
Error using ==> inputcheck>LocalCheckHandles at 196
Handle Graphics handle must be a Figure.

Error in ==> inputcheck at 28
pj.Handles = [ pj.Handles LocalCheckHandles(cur_arg) ];

Error in ==> print at 172
[pj, devices, options ] = inputcheck( pj, varargin{:} );

Error in ==> gui_absorptionsgrad>pdf_Callback at 270
print(h,'-f2', '-dpdf', [path file])

Error in ==> gui_mainfcn at 96
feval(varargin{:});

Error in ==> gui_absorptionsgrad at 42
gui_mainfcn(gui_State, varargin{:});

??? Error while evaluating uicontrol Callback


kann damit jemand was anfangen?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 10.04.2008, 10:10     Titel:
  Antworten mit Zitat      
Hmmmm,

ich hab eben mal in der Hilfe geschaut, was das -f2 zu bedeuten hat...
Bei mir klappt es, wenn du das '-f2' in der Zeile wegnimmst:
Code:
print(h,'-dpdf',[path file]);
 


Probiers mal Rolling Eyes
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
mel2503
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 03.01.08
Wohnort: ---
Version: 7
     Beitrag Verfasst am: 10.04.2008, 10:24     Titel:
  Antworten mit Zitat      
mh nee bei mir kommt noch dieselbe fehlermeldung!
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 10.04.2008, 14:21     Titel:
  Antworten mit Zitat      
Ich glaube ich habs gefunden...
Du überschreibst in der Zeile
Code:
%     Kurve zeichnen
    h=semilogx(f,alpha,'r-d');
deine Variable h.
Benenn die Variable in der Zeile mal um und versuch es nochmal Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
mel2503
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 03.01.08
Wohnort: ---
Version: 7
     Beitrag Verfasst am: 10.04.2008, 14:49     Titel:
  Antworten mit Zitat      
jetzt kommt keine fehlermeldung mehr, aber das problem mit dem überschreiben besteht immer noch!
kann ich ihm nicht irgendwie sagen er soll ein neues dokument nehmen?
lg
Private Nachricht senden Benutzer-Profile anzeigen
 
student
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 10.03.08
Wohnort: ---
Version: 7.0
     Beitrag Verfasst am: 10.04.2008, 18:58     Titel:
  Antworten mit Zitat      
hast du schonmal versucht
Code:

anstelle von
Code:

zu nehmen? So wie ich das sehe, plottest du alles in figure(2).

Viele Grüsse
Student
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 11.04.2008, 09:48     Titel:
  Antworten mit Zitat      
Stimmt!

Ich denke, man kann es auch so schreiben:
Code:
h = figure('Visible','off',...
           'PaperPosition', [3 2 16 26],...
           'PaperSize', [20.98 29.68],...
           'PaperType','a4letter');

Dann sollte es auch funktionieren, wenn ich mich nicht total täusche Rolling Eyes

Gruß
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
Sailor

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.12.2008, 16:34     Titel:
  Antworten mit Zitat      
Hallo

Damit in jedem neuem PDF nur die neuen Grafiken gespeichert werden, muss man den Inhalt der figure leeren. D.h.: Vor dem ersten subplot Befehl solltes du folgendes einfügen:
Code:
clf;   % Dieses löscht das aktuelle figure object


Viele Grüße
 
Schäfchen
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 23.01.11
Wohnort: Karlsruhe
Version: 2008 a, 2010b
     Beitrag Verfasst am: 24.01.2011, 11:47     Titel:
  Antworten mit Zitat      
Hallo,
ich habe denke ich mal ein ähnliches Problem.
Beim ausführen folgendes Codes kommt immer die Fehlermeldung unten.
Leider kann ich mit dieser nichts anfangen. Hat da jemand mehr Ahnung?
Vielen Dank schon mal.


Code:

%ermitteln der Position des aktuellen Fensters und zoom auf Ursprungliche größe setzen

pos=get(gcf,'position');
zoom out;

%Neues Figure erstellen
f2=figure;

% Einstellungen fürs Figure durchführen
set(f2,'Units','normalized','position',pos);
set(f2,'outerposition',get(f1,'outerposition'),'Toolbar','figure','doublebuffer', 'on','PaperUnits','inches');
set(f2,'PaperPositionMode','auto','menubar','none','InvertHardcopy','off','visible','off'),

% Graphik mit handle ha.f4 aus figure 1 in figure 2 kopieren

copyobj(ha.f4,f2);

% Computereinstellung dpi ermitteln
pix=get(0,'ScreenPixelsPerInch');

% position in inches ermittlen
pixpos=pos/pix;

% Pdf-Größe auf diese ermittelte Größe setzen
set(gcf,'PaperSize',pixpos(3:4));

    % Menü zum Auswählen des Speicherverzeichnisses
    [datname,pathname]=uiputfile('','Wähle Protokollnamen aus','Protokoll');

    % Dateinamen ein .pdf hinzufügen
    file=sprintf('%s%s.pdf',pathname,datname);

    % pdf speichern

    print(f2 ,'-loose','-opengl','-r0','-dpdf',file);
% Figure 2 löschen
    delete(f2);

 


Zitat:

Warning: Failed in CreateDIBSection, OpenGL application
error (bmp00000000,pix00000000,gle00000000)
> In C:\Program Files\MATLAB\R2010b2\toolbox\matlab\graphics\hardcopy.p>hardcopy at 21
In graphics\private\render at 142
In print at 316
In protokollsavefcn at 51
In mysavefcn at 35
Warning: Problems in UIW_SetUpGLPrinting
> In C:\Program Files\MATLAB\R2010b2\toolbox\matlab\graphics\hardcopy.p>hardcopy at 21
In graphics\private\render at 142
In print at 316
In protokollsavefcn at 51
In mysavefcn at 35
??? Error using ==> print at 364
Problem converting PostScript. System returned error:
-1.Failed to convert to output format; Ghostscript status:
-100.Error: /undefined in bplotndefined
Operand stack:

Execution stack:


Error in ==> protokollsavefcn at 51
print(f2 ,'-loose','-opengl','-r0','-dpdf',file);

Error in ==> mysavefcn at 35
protokollsavefcn(f1handles,f1data);

??? Error while evaluating uipushtool ClickedCallback


Gruß Schäfchen
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 - 2024 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.