Usando TimeSeriesChart de JFreeChart
Veamos cómo usar la librería JFreeChart para crear un gráfico del tipo TimeSeriesChart. Antes de continuar, para este ejemplo he usado la versión jfreechart-1.0.14.zip (7.8 MB). El gráfico que vamos a crear se verá de la siguiente manera:
Una vez descargada la líbreria de la página oficial de JFreeChart en SourceForge, ustedes tienen que incluir dos archivos jars en su proyecto:
- jcommon-1.0.17.jar
- jfreechart-1.0.14.jar
El escenario es sencillo. La idea es crear un gráfico que muestre a través del tiempo los diferentes valores que pueden tener las series en cuestión (las series son los objetos medibles, en este ejemplo mediremos algunos músculos, simulando su historial como si se estuviera en un gimnasio).
¿Cuáles elementos se consideran para el gráfico?
Veamos paso a paso cómo se compone el gráfico TimeSeriesChart:
- Series (rodilla y cuello): son los objetos medibles que perduran a través del tiempo.
- Eje X (mes y año): como las series cambian a través del tiempo, usaremos el mes del año para crear puntos de comparación.
- Eje Y (medidas): son los valores que pueden tomar las series, los valores varían a través del tiempo.
Tabla de datos
La tabla de datos simulará una base de datos que usaremos para construir el gráfico. En este ejemplo, la tabla de datos es un objeto JTable que luce algo asi:
Generar las series
Primero debemos crear las series, y especificar que éstas se medirán a través de cada mes del año:
TimeSeries seriesRodilla = new TimeSeries("Rodilla", Month.class);
TimeSeries seriesCuello = new TimeSeries("Cuello", Month.class);
Para agregar valores a una serie determinada usamos el método add() como se ve a continuación:
seriesRodilla.add(new Month(mes, anho), medida);
Un detalle más. Más adelante veremos que para construir el gráfico, necesitaremos un objeto de tipo DataSet. Este objeto contiene el modelo de datos que tendrá el gráfico, por lo tanto, cuando terminemos de crear las series debemos crear este objeto de datos y agregar nuestras series.
TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(seriesRodilla); dataset.addSeries(seriesCuello);
En el ejemplo, recorremos la tabla dinámicamente para llenar las series de valores, veamos:
/**
* PASO 1: CREAR EL MODELO DE DATOS
*/
private TimeSeriesCollection crearModelo() {
// Series
String RODILLA = "Rodilla";
String CUELLO = "Cuello";
// indice de las columnas
int MUSCULO = 0;
int MEDIDA = 1;
int MES = 2;
int ANHO = 3;
// Se crean las series por separado
TimeSeries seriesRodilla = new TimeSeries(RODILLA, Month.class);
TimeSeries seriesCuello = new TimeSeries(CUELLO, Month.class);
// Se recorre la tabla para extraer los datos
for (int i = 0; i < tabla.getRowCount(); i++) {
int mes = Integer.parseInt(tabla.getValueAt(i, MES).toString());
int anho = Integer.parseInt(tabla.getValueAt(i, ANHO).toString());
int medida = Integer.parseInt(tabla.getValueAt(i, MEDIDA).toString());
// se agrega el valor a la serie correspondiente
if (tabla.getValueAt(i, MUSCULO).toString().equals(RODILLA)) {
seriesRodilla.add(new Month(mes, anho), medida);
} else {
seriesCuello.add(new Month(mes, anho), medida);
}
}
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(seriesRodilla);
dataset.addSeries(seriesCuello);
return dataset;
}
Ahora es necesario crear un objeto llamado JFreeChart. Este objeto extiende de JPanel, porque es en él donde se pinta el gráfico. Pero para poder pintarse debemos asignarle ciertos valores como el título, datos, y algunos argumentos interesantes:
private ChartPanel crearGrafico() {
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Evolucion de las medidas",
"Date", // el modo en como se va a ver el eje X
"Medida en centimetros",
crearModelo(),
true, // mostrar leyendas
true, // mostrar tooltips
false // generar urls
);
return new ChartPanel(chart);
}
Notén que estoy llamando al método crearModelo() dentro del contructor. Es la manera de asignarle los datos al gráfico. Finalmente, podemos incluir el objeto JFreeChart generado a un JPanel de nuestra aplicación.
ChartPanel grafico = crearGrafico(); panel.add(grafico);
Fuentes
- Archivos planos: TimeSeriesChart Fuentes
- Proyecto en netbeans: TimeSeriesChart NetBeans
Resultado final
Así luciría la aplicación:
Read More



Comentarios recientes