Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Application Engineer (m/w)
Unterstützung des Vertriebs bei der Erstellung von Angeboten und Präsentation beim Kunden
Control Techniques GmbH - Hennef

Softwareentwickler (w/m) Bypassing- und Steuergeräte-Schnittstellen
Entwicklung von Echtzeit-Software für verschiedene automotive Microcontroller
dSPACE GmbH - Paderborn

Software-Entwickler (m/w) Automotive
Implementierung und Verifizierung von Software-Modulen
MBtech Group GmbH & Co. KGaA - Neu-Ulm, Lindau

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Plot als a4-pdf in bestimmter Qualität speichern

 

gomatlab
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2016, 14:09     Titel: Plot als a4-pdf in bestimmter Qualität speichern
  Antworten mit Zitat      
Hallo,

folgender code zur Erzeugung eines Plots:

Code:
N = 1e3;
t = linspace(1,100,N);

subplot(2,2,1)
plot3(cos(t),sin(t),t);
title('Plot 1')
xlabel('x')
ylabel('y')
zlabel('z')

subplot(2,2,2)
plot3(cos(t),t.^2,1./t);
title('Plot 2')
xlabel('x')
ylabel('y')
zlabel('z')

subplot(2,2,3)
plot3(t,1./t,exp(t./10));
title('Plot 3')
xlabel('x')
ylabel('y')
zlabel('z')

subplot(2,2,4)
plot3(t,t.^2,t.^3);
title('Plot 4')
xlabel('x')
ylabel('y')
zlabel('z')

print('Filename','-dpdf')


Problem 1:
Wenn ich N größer werden lasse, wir auch die erzeugte Datei Filename.pdf immer größer und das Erstellen der Datei dauert deutlich länger. Das ist schlecht, da N noch deutlich größer werden muss. Kann man das irgendwie anders lösen? Es muss aber als pdf gespeichert werden. Irgendwie eine schlechtere pdf-Auflösung oder so.

Problem 2:
Wie bekomme ich es hin, dass die vier Plots in maximaler, an die Seitengröße angepasste Größe erscheinen? Dabei soll das Format A4-Querformat sein.
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.10.2016, 12:24     Titel: Re: Plot als a4-pdf in bestimmter Qualität speichern
  Antworten mit Zitat      
Hallo gomatlab,

Wenn Du diagramme mit vielen Datenpunkten hast, müssen die PDFs doch größer werden. Da die graphisches Elemente als Vektorgrafik gespeichert werden, sollte das allerdings nicht viel ausmachen. Reduzieren kann man die Daten nicht, denn dann würden ja die Linien nicht mehr vollständig dargestellt werden.

Wie groß ist denn ein typisches N? Es macht einen Unterschied, ob Du hier von 1e4 oder 1e9 Daten sprichst.

Die Diagramme kannst Du verteilen, wenn Du die Eigenschaften der figure entsprechend setzt: 'PaperPosition', 'PaperSize' etc. Suche mal danach in der Dokumentation von figure .

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 12.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2016, 14:32     Titel:
  Antworten mit Zitat      
Ok, das mit dem Papierformat habe ich halbwegs hinbekommen:
Code:
N = 1e4;
t = linspace(1,100,N);

figure('Units','centimeters','PaperUnits','centimeters','PaperType','a4','PaperOrientation','landscape','PaperPosition',[0 0 21 29.7])
subplot(2,2,1)
plot3(cos(t),sin(t),t);
title('Plot 1')
xlabel('x')
ylabel('y')
zlabel('z')

subplot(2,2,2)
plot3(cos(t),t.^2,1./t);
title('Plot 2')
xlabel('x')
ylabel('y')
zlabel('z')

subplot(2,2,3)
plot3(t,1./t,exp(t./10));
title('Plot 3')
xlabel('x')
ylabel('y')
zlabel('z')

subplot(2,2,4)
plot3(t,t.^2,t.^3);
title('Plot 4')
xlabel('x')
ylabel('y')
zlabel('z')

print('Filename','-dpdf')


Zum Dateigrößenproblem:
Sowohl der PC als auch der Drucker können ja eh nur Pixel anzeigen und drucken. Sobald man genug Punkte hat um eine durchgehende Linie darzustellen braucht man ja nicht noch mehr in die Datei zu packen.
Der Code ist nur ein Beispiel, eigentlich geht es um einen 3D surface plot. Das Problem ist aber das gleiche. Es macht von der Darstellung einen Unterschied wieiviele Punkte ich nehme. Je nach Anzahl sieht die Fläche "glatt" oder "kantig" aus. Dass die Berechnung bei mehr Punkten länger dauert, ist klar. Aber warum die Datei immer größer wird und bei der Erzeugung länger dauert, leuchtet mir nicht wirklich ein. Wenn ich ein großes N wähle, den plot berechne und dann einen Screenshot mache und als pdf speichere ist die Datei um ein Vielfaches kleiner, die "Qualität" der Fläche ist aber genauso gut. Nur wenn ich direkt aus Octave als pdf speichere werden die Dateien eben riesig.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.10.2016, 06:53     Titel:
  Antworten mit Zitat      
Hallo gomatlab,

Das ist ein seltsamer Name...

Zitat:
Zum Dateigrößenproblem:
Sowohl der PC als auch der Drucker können ja eh nur Pixel anzeigen und drucken. Sobald man genug Punkte hat um eine durchgehende Linie darzustellen braucht man ja nicht noch mehr in die Datei zu packen.

Für Pixel-Grafiken stimmt das nur bedingt. Denn die Auflösung am Monitor ist bei 72 oder 96 dpi, bei Apples Retina-Displays höher, bei Druckern aber bis zu 1200 dpi. Welche Anzahl von Pixeln wäre dann also geeignet?
Aber Matlab speichert die Grafiken in PDFs (sofern sie mit dem Painters-Renderer erstellt wurden) sowieso als Vektorgrafiken ab: Dann ist nur der Start- und Endpunkt jedes geraden Linien-Segments gespeichert und die Auflösung spielt gar keine Rolle. Man kann dann auch eibnen beliebigen Teil-Ausschnitt vergrößern ubnd hat immer noch scharfe Linien ohne Treppen-Effekte der Pixel.

Zitat:
Der Code ist nur ein Beispiel, eigentlich geht es um einen 3D surface plot. Das Problem ist aber das gleiche.

Nein, das ist ein grundsätzlich anderes Problem. Deshalb war der Beispiel-Code irreführend. Ein 3D-Surface-Plot wird nämlich als Default mit dem OpenGL-Renderer erzeugt, sodass beim Abspeichern Pixel-Grafiken verwendet werden. Hier spielt die Auflösung also doch eine Rolle.

Zitat:
... einen Screenshot mache und als pdf speichere ist die Datei um ein Vielfaches kleiner, die "Qualität" der Fläche ist aber genauso gut.

Ah, ein Screenshot. Das ist wieder etwas grundsätzlich anderes, denn hier werden die Bilder mit 72dpi (bzw. höher, siehe oben) abgespeichert. Das sieht auf einem Drucker aber schon pixelig aus.

Zitat:
Nur wenn ich direkt aus Octave als pdf speichere werden die Dateien eben riesig.

Aha, es geht nicht um Matlab, sondern Octave. Auch das macht einen Unterschied.

Bitte erkläre das Problem immer von Anfang an so präzise wie möglich. Code zu posten, der etwas anderes macht als der echte, raubt die Zeit der Antwortenden und damit auch Deine. Ich verschiebe die Frage in die Kategorie "Octave".

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 28.10.2016, 06:54 Uhr von Jan S
Von Grafiken und Plots nach Octave-Forum
 
AndyydnaA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2016, 09:11     Titel:
  Antworten mit Zitat      
Also zuerst mal muss ich Jan in jedem Punkt recht geben.

Wenn du die "Auflösung" in einer Vektorgrafik herabsetzen möchtest, dann nimm einen Dezimationsfilter vor dem plotten, z.B. "decimate" in Octave.

Wenn du wirklich eine feste Ausflösung in pixels willst, dann mach ein png und binde das in ein pdf ein, geht auf GNU/Linux recht einfach mit gm convert, ggf. asl system aufruf aus Octave heraus.

Alle Vorteile einer Vektorgrafik, wie die Möglichkeit zum heran zoomen ohne pixelig zu werden, entfällt dann
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.