2010-12-02 29 views
6

Hago una docena de parcelas con Gnuplot en Mac a través de ruby-gnuplot. Si vuelvo a ejecutar mi script de ruby, entonces el número de ventanas abiertas con las tramas se duplica. Si pudiera generar todos estos gráficos en un PDF abierto en Vista previa, entonces el archivo se actualizaría automáticamente después de cada nueva ejecución y no necesito molestarme en cerrar las numerosas ventanas.¿Cómo crear un archivo PDF de varias páginas con Gnuplot?

Actualmente puedo lograr esto sólo con una parcela por archivo PDF:

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

¿Cómo puedo hacer un solo PDF con todas mis figuras de Gnuplot?

Respuesta

7

Hmm, al menos en gnuplot de la ONU * x, la producción de varias páginas para PostScript y PDF siempre era el valor por defecto - siempre y cuando no cambie ya sea el tipo de terminal ni reasignar el archivo de salida, todo lo que termina en parcela una nueva página.

I.e. que hace:

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

y se termina con dos páginas en el archivo PDF, que contiene una línea/parábola, el otro seno/coseno.

Para aclarar: Lo importante es la emisión de todos los comandos plot en secuencia, sin cambiar el archivo de salida, ni cambiar el tipo de terminal. Gnuplot no se agregará a un archivo PDF existente.

+2

Tienes razón, estaba reasignando la salida entre los trazados. ¡Gracias por abrir mis ojos! –

+0

No lo entendí. ¿Dónde configurar el terminal/salida si se usa Ruby-Gnuplot? – Twonky

0

Hago miles de parcelas con ruby-gnuplot y uso una gema llamada gamba para compilarlas en un pdf. El siguiente es un fragmento de código usando gambas, que incluye algunas características útiles:

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 

Eso debe ser lo suficientemente fácil de adaptar a sus propósitos.

Cuestiones relacionadas