Use gnuplot para plotar dados em Ruby

Se você precisa de uma forma de plotar alguns dados com Ruby, você deve considerar o Gnuplot como uma possibilidade. Ele permite que você produza diferentes tipos de arquivo (por exemplo, png, svg ou pdf) e tem uma grande variedade de operações científicas.

Para mais informações sobre o Gnuplot, consulte o manual

Para instalar o GnuPlot no OSX, você pode apenas executar

$ brew install gnuplot

e você está pronto.

Para o ruby, existe uma gema GnuPlot, mas tive o problema de não gerar nenhum arquivo de nenhum tipo, então escolhi a forma manual de passar os comandos diretamente para o GnuPlot.

No meu exemplo abaixo, estou extraindo os dados para plotar de um arquivo CSV, mas realmente não importa de onde eles vêm. Coloque-o em uma matriz e você ficará bem.

require 'csv'
require 'open3'

data
= CSV.read("data.csv", {:col_sep => "t"})
data
.collect! { |item| item[4].to_f} # extract a field value and parse to float
data
.shift # removes the header

gnuplot_commands
= <<"End"
set terminal png
set output "plot.png"
set xrange [0:#{data.size}]
plot
"-" with points
End
data
.each_with_index do |y, x|
gnuplot_commands
<< x.to_s + " " + y.to_s + "n"
end
gnuplot_commands
<< "en"

image
, s = Open3.capture2(
"gnuplot",
:stdin_data=>gnuplot_commands, :binmode=>true)

Com isso, o GnuPlot calcula o intervalo do eixo Y para você (para combinar os dados no gráfico) e plota os dados como pontos individuais. Você também pode fazer falas e tal, se desejar.
A saída é encontrada em plot.png no diretório de trabalho atual.