Gráficas en Ruby
Hoy vamos a hacer un pequeño ejercicio que nos ayudará para futuros artículos. Vamos a hacer unas cuantas gráficas en Ruby.
Como siempre que empezamos con algun nuevo tema rubista instalaremos la gem correspondiente.
sudo gem install gruff
Esta gem tiene como prerequisito instalar RMagick. El problema es que no está en los repos por lo que su instalación es un poquito más farragosa pero merece la pena
En este caso utilizaremos Gruff. No tiene mucho tiempo de desarrollo aún por lo que está algo verde pero para la mayor parte de lo que vamos a necesitar nos sirve perfectamente. Además la podemos usar en Ruby solamente o con Rails.
Vamos a comenzar con un ejemplo simple que se muestra en la documentación
require 'rubygems'
require 'gruff'
g = Gruff::Line.new
g.title = "My Graph"
g.data("Apples", [1, 2, 3, 4, 4, 3])
g.data("Oranges", [4, 8, 7, 9, 8, 9])
g.data("Watermelon", [2, 3, 1, 5, 6, 8])
g.data("Peaches", [9, 9, 10, 8, 7, 9])
g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}
g.write('my_fruity_graph.png')
Si ejecutamos este sencillo script se generará un fichero llamado my_fruity_graph.png que contendrá esta imagen.

Como vemos el código resulta bastante sencillo de leer y el gráfico, por defecto es bastante vistoso. Además podemos hacer otros tipos de gráficos igual de fácil. Por ejemplo:
require 'rubygems'
require 'gruff'
g = Gruff::Pie.new
g.title = "Resultados del Sporting"
g.data("Victorias", 4)
g.data("Empates", 2)
g.data("Derrotas", 4)
g.write('sporting.png')
<p style="text-align: left;">
Que nos resultará en algo así:

E incluso podemos configurar el color de manera igual de sencilla
require 'rubygems'
require 'gruff'
g = Gruff::Pie.new
g.title = "Resultados del Sporting en colores"
g.data("Victorias", 4, "#FF0000" )
g.data("Empates", 2, "#6600FF" )
g.data("Derrotas", 4 ,"#FFFFFF")
g.write('sporting-colores.png')
<p style="text-align: left;">
Y formaremos una precios bandera de la república checa:

Por último vamos a hacer una pequeña pruebecita de rendimiento. A veces querremos hacer gráficos verdaderamente complejos así que vamos a hacer un gráfico de lines bastante duro con, digamos 1.000 datos por 3 lineas. Vemos cuanto tiempo tarda.
require 'rubygems'
require 'gruff''
g = Gruff::Line.new("800x600")
g.title = "Test de stress"
seno = []
coseno = []
tangente = []
for i in 0..10000 do
seno.push(50*Math.sin(i*0.1))
coseno.push(10)
if i % 100 == 0
print "."
end
end
print "\n"
g.data("Seno", seno)
g.data("Linea", coseno)
g.normalize
print "Imprimiendo gráfico\n"
antes = Time.new
g.write('supergrafico.png')
despues = Time.new
print "Generacion terminada\n"
total = despues.to_i - antes.to_i
print "He tardado: #{total} segundos\n"
print “He tardado: #{total} segundos\n”[/code]
Con este ejemplo ha tardado 234 segundos. Lo cual tampoco está tan mal.
De todos modos he encontrado un gran defecto a la herramienta. Cuando he hecho pruebas con gráficas de 8000x6000 por ejemplo, en lugar de hacer una gráfica más grande y más detallada me ha creado una gráfica escalada más grande, es decir, con las líneas más gordas. ¡Para eso lo escalo yo!
De todos modos no es una mala librería para hacer gráficas. Sencilla y eficaz
Actualización: Para cambiar el formato de salida tan solo tenemos que cambiar la extensión del nombre de fichero de salida. Por ejemplo, si lo cambiamos por "salida.eps" tendremos un postscript encapsulado para poner en un docuemnto latex.






Pues si no esta en las repos, que le den por culo. Si encuentras uno chulo para hacer graficas con datos de .csv para latex, me dices. Pero que este en las repos.
Atentamente tu querido amigo.
Quería mirar algo sobre exportar a Latex… Algo escribiré.