hit counter
Unique Visitors

1 September 2008

Ruby on Rails - Gerar Gráficos

Como consequência do projecto que tenho vindo a desenvolver no trabalho, tive de aprender Ruby on Rails. Recentemente descobri umas classes em Java que nos permitem criar gráficos com muita facilidade.

"JFreeChart" é um conjunto de classes grátis que nos possibilitam criar gráficos para as nossas aplicações. Gráficos de barras, 3D, linhas e muitos outros tipos.

Vou falar aqui de algumas classes que usadas em conjunto se podem tornar bastante poderosas.
  • ChartFactory: classe que nos permite criar os gráficos através da definição do eixo das ordenadas e do eixo das coordenadas, definição de legendas, orientação dos dados, etc.
  • ChartUtilities:esta classe permite-nos, entre outras opções, guardar os nossos gráficos em ficheiros de imagens, nomeadamente JPEG e PNG;
De seguida vou dar-vos um pequeno exemplo de como podemos usar esta poderosa ferramenta.
Nota: o código apresentado representa apenas parte de uma solução completa e supõem-se que quem estiver a ler este post já tenha alguns conhecimentos tanto de Java como de RoR.

O funcionamento básico consiste em, termos um controlador do RoR que comunica com uma classe "ChartEngine" criada por nós que por sua vez chama as classes Java do JFreeChart.

graph_controller.rb

include_class Java::com.myrio.qa.chart.ChartEngine
include_class Java::org.jfree.data.xy.XYSeries
include_class Java::org.jfree.data.xy.XYSeriesCollection

def build_jvm_graph()
ce = ChartEngine.new
ce.setUnitsX('occurrence')
ce.setUnitsY('MB')
ce.setSize('small')
ce.setTitle("Client Postaction JVM Free")
ce.setFilePrefix("#jvm")

series = XYSeries.new "Client Postaction JVM Free"
dataset = XYSeriesCollection.new

index = 0
ctas.each { | cta |
index += 1
series.add(index, value)
}
dataset.addSeries(series)

return ce.drawXYSeriesChart(dataset)
end


ChartEngine.java

public String drawXYSeriesChart(XYSeriesCollection dataset) {
String filename = "/" + filePrefix + ".png";
JFreeChart chart =
ChartFactory.createXYLineChart(title,
unitsX,
unitsY,
dataset,
PlotOrientation.VERTICAL,
true,
false,
false);

try {
ChartUtilities.saveChartAsPNG(new File(fChartsDir.getPath() + filename),
chart,
width,
height);
}
catch (IOException e) {
e.printStackTrace();
}
return "charts" + filename;
}


Esta última classe o que faz é inicializar as variáveis da classe ChartFactory como por exemplo as unidades dos eixos X e Y, o título e o tamanho do gráfico entre outras.



Links:

Labels: