2010-12-02 7 views
6

Ich mache ein Dutzend Parzellen mit Gnuplot auf Mac über ruby-gnuplot. Wenn ich mein Ruby-Skript erneut ausführen lasse, verdoppelt sich die Anzahl der geöffneten Fenster mit den Plots. Wenn ich alle diese Plots einfach in einem PDF ausgeben könnte, das in der Vorschau geöffnet ist, dann wird die Datei automatisch nach jedem erneuten Durchlauf aktualisiert und ich muss nicht die zahlreichen Fenster schließen.Wie erstellt man eine mehrseitige PDF-Datei mit Gnuplot?

Zur Zeit kann ich das nur mit einem Grundstück per PDF-Datei erreichen:

Gnuplot.open do |gp| 
    Gnuplot::Plot.new(gp) do |plot| 
    plot.arbitrary_lines << "set terminal pdf \n set output 'figures.pdf'" 
    # ... 
    end 
end 

Wie kann ich eine einzige PDF-Datei mit allen meinen Figuren von Gnuplot machen?

Antwort

7

Hmm, zumindest auf Gnuplot für UN * x, mehrseitige Ausgabe für Postscript und PDF war immer der Standard - solange Sie weder den Terminal-Typ ändern noch die Ausgabedatei neu zuweisen, alles, was Sie plotten endet eine neue Seite.

I.e. Sie tun:

set terminal pdf 
set output "multipageplot.pdf" 
plot x, x*x 
plot sin(x), cos(x) 
set output "" 

und Sie mit zwei Seiten in der PDF-Datei am Ende, eine, die Linie/Parabel, die andere Sinus/Cosinus.

Zur Verdeutlichung: Wichtig ist, dass nacheinander alle plot Befehle ausgegeben werden, ohne die Ausgabedatei zu ändern oder den Terminaltyp zu ändern. Gnuplot hängt nicht an eine vorhandene PDF-Datei an.

+2

Sie haben Recht - Ich habe die Ausgabe zwischen den Plots neu zugewiesen. Danke, dass du meine Augen geöffnet hast! –

+0

Ich habe es nicht verstanden. Wo kann man das Terminal/die Ausgabe setzen, wenn man Ruby-Gnuplot benutzt? – Twonky

0

Ich mache Tausende von Plots mit Ruby-Gnuplot und benutze ein Juwel namens Prawn, um sie in ein PDF zu kompilieren. Das Folgende ist eine Code-Schnipsel mit Garnelen, die einige nützliche Funktionen:

require 'prawn' 

def create_pdf 
    toy_catalogue = @toy_catalogue 
    full_output_filename ||= "#{output_path}/#{pre-specified_filename_string}" 
    Prawn::Document.generate(full_output_filename, :page_layout => :portrait, :margin => 5, :skip_page_creation => false, :page_size => [595, 1000]) do 
    toy_catalogue.each do |toy| 
     start_new_page 

     image toy[:plan_view], :at => [0,900], :width => 580 

     image toy[:front_view], :at => [0, 500], :width => 585 

     font_size(20) { draw_text toy[:name], :at => [5, 920] } 

     draw_text "production_date = #{toy[:date]}", :at => [420, 930] 
    end 
    end 
end 

Das leicht genug sein sollte, um Ihre Zwecke anzupassen.