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;
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: Informática