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.