vivencias de un java developer

Just another java fan developer!

Archive for the ‘Graphics’ Category

GNUPlot: Libreria para hacer graficas 3D

Posted by jquantdeveloper on February 6, 2008

Muy encantado yo estaba con JFreeChart, hasta que me toco hacer una grafica de tres dimensiones. Lamentablemente, JFreeChart solo soporta graficos de dos dimensiones, asi que tuve que navegar por la internet para buscar una libreria que me permita realizar graficas 3D a traves de C++.

GNUPlot ha sido la libreria que seleccione para hacer graficas en tres dimensiones. Esta libreria esta disponible para windows y linux, y con ella podras hacer cualquier tipo de graficas (2D, 3D, barras, etc.).

La pagina principal de la libreria es: http://www.gnuplot.info/ . Esta te brinda una gran cantidad de ejemplos y direcciones externas que te permitiran manejar al 100% esta libreria.

¿Como conectarse a gnuplot a traves de C++?

Solo consta de llamar al ejecutable a traves del metodo fopen(direccion de origen del ejecutable,”w”), y despues enviar los comandos gnuplots utilizando fputs(comando gnuplot,variable fopen).

Posted in Graphics | 6 Comments »

Graficas de tiempo en JFreeChart

Posted by jquantdeveloper on June 14, 2007

Vamos a crear un programa que muestre la evolución del precio de un instrumento durante un tiempo atrás. La información consta básicamente de estos parámetros: precio de apertura, precio más bajo, precio más alto, precio de cierre, volumen de transacciones y el día de trading. Todos los parámetros antes mencionados podemos definirlo en una clase llamada HistoricalQuote.
En la clase principal (donde arranca la aplicación), las clases que debemos importar son las siguientes:

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;

Lo primero que tendrás que hacer es crear un frame en donde se colocaran los componentes de jfreechart.
En el frame se agregara una instancia de la clase ChartPanel. Esta clase viene a jugar la función de contenedor de objetos de tipo JFreeChart.

ChartPanel chartContainer = new ChartPanel(getTimeSeriesChart());

En este ejemplo se declara una variable chartContainer de tipo ChartPanel al cual se le envía a su constructor un objeto de tipo JFreeChart ,que se obtiene a través del método llamado getTimeSeriesChart().

public JFreeChart getTimeSeriesChart()
{
if (data != null)
jfreechart = ChartFactory.createTimeSeriesChart(“Price Chart – ” + Symbol, “Time”, “Value”, createDataset(), true, true, false);
else
jfreechart = ChartFactory.createTimeSeriesChart(“Price Chart”, “Time”, “Value”, null, true, true, false);

return jfreechart;
}

Aquí arriba se muestra el cuerpo del método getTimeSeriesChart(), en cual debo señalar que la variable data representa la información que se va a desplegar. En este caso data es una lista de objetos de tipo HistoricalQuote.

La variable jfreechart obtiene valor mediante la llamada al método createTimeSeriesChart() de la clase ChartFactory. Este metodo se le debe mandar:
El titulo del grafico: “Price Chart”
El titulo del y axis: “Time”
El titulo del x axis: “Value”
El objeto que representa la información del chart : createDataset().

El método createDataset() retornara un objeto de tipo XYDataset, que representa graficas de coordenadas x, y
private XYDataset createDataset()
{
timeseries = new TimeSeries(“Close Price”, org.jfree.data.time.Day.class);
for (int i = 0; i < data.size(); i++)
{
SimpleDate time = new SimpleDate(getData().get(i).getSampleDate());
timeseries.add(new org.jfree.data.time.Day(time.getDayNumber(), time.getMonthNumber(), time.getYearNumber()), getData().get(i).getClosePrice());
}
timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
return timeseriescollection;
}

Para representar una serie de puntos de coordenadas x, y crearemos una instancia de la clase TimeSeries que recibirá el nombre de la serie y la unidad de tiempo a utilizar (Day, Time, etc).
Si pueden observar, dentro del ciclo he declarado una variable time de tipo SimpleDate que me permitirá obtener el día, mes y año de la fecha que tiene el objeto de tipo HistoricalQuote (pueden crear su versión personal de SimpleDate).

timeseries.add(new org.jfree.data.time.Day(time.getDayNumber(), time.getMonthNumber(), time.getYearNumber());

Se puede dar el caso que se quieran agregar más de una serie de tiempo, así que se debe crear una instancia de la clase TimeSeriesCollection para soportar múltiples series de tiempo.

Espero haber sido lo mas explicito posible y tratare de enviarles el código completo en caso de haber alguna duda.
Hay que señalar que antes de todo lo señalado, se debe obtener una fuente que nos provea HistoricalQuotes, así que el próximo post les hablare algo de base de datos!

Posted in Graphics | 3 Comments »

Librerias para graficas estadisticas en Java

Posted by jquantdeveloper on June 6, 2007

Para los developers que desarrollan aplicaciones con graficas de barras, gannt y otros tipos de grafico estadistico, existe un paquete llamado JFreeChart. Este paquete es open source y cuenta con una amplia variedad de tipos de graficos.

Para mi concepto es una buena opcion, solo que esta carente los tutoriales sobre esta herramienta. Para que puedas aprender sobre la misma, al momento de bajar los archivos comprimidos estos traen una demo que muestra ejemplos de lo que puedes hacer con este paquete. Muy bien puedes tomar el jar de la demo y decompilar los ejemplos que quieras utilizar para practicar (jad es un ejemplo de decompilador).

Para bajarlo pueden buscarlo en su pagina web: http://www.jfree.org/jfreechart/ o pueden buscarlo en sourceforge.com!

Espero en el siguiente post describir algunos ejemplos. Si conocen de algo sobre esta herramienta o conocen otro paquete seria bueno que lo comentaran!

Posted in Graphics | 1 Comment »