PieChart JavaFX

El PieChart es una gráfica circular en donde se muestran las proporciones de los valores usados para generar la gráfica, los datos contenidos en un PieChart están definidos por la clase PieChart.Data que usualmente contiene un nombre y un valor, cada objeto de esta clase representa una sección de la gráfica, para nuestra demostración vamos a representar las temas y la cantidad de publicaciones de nuestro blog, los datos no son reales.

Para crear este gráfico podemos usar uno de los siguientes constructores:

PieChart()
PieChart(ObservableList<PieChart.Data> data)

Para definir los datos que se graficarán debemos crear una lista de objetos PieChart.Data("C++", 18) como vemos en el constructor indicamos el nombre y el valor de los datos, ejemplo:

ObservableList<PieChart.Data> data = FXCollections.observableArrayList();
data.add(new PieChart.Data("OpenCV", 20));
data.add(new PieChart.Data("JavaFX", 40));
data.add(new PieChart.Data("Python", 10));
data.add(new PieChart.Data("Spring", 15));

Para configurar la presentación usaremos los métodos setTitle("...") para establecer el titulo del gráfico, setLegendSide(Side) cambia la posición de la leyenda, la enumeración Side define las distintas posiciones disponibles, de un modo similar podemos usar setTitleSide(Side) para cambiar la posición del titulo, también tenemos setLeyendVisible(false) que ocultará la leyenda.

Si no deseamos mostrar las etiquetas disponemos de setLabelsVisible(false) para este propósito, con el uso de setLabelLineLength(50) cambiamos la longitud de la línea que une la etiqueta con la sección correspondiente del gráfico.

JavaFX Gráficas PieChart

Este es el código completo para mostrar la respectiva gráfica, con los datos de publicaciones agrupadas por temas de nuestro blog.

ObservableList<PieChart.Data> data = FXCollections.observableArrayList();
data.add(new PieChart.Data("OpenCV", 20));
data.add(new PieChart.Data("JavaFX", 40));
data.add(new PieChart.Data("Python", 10));
data.add(new PieChart.Data("Spring", 15));
data.add(new PieChart.Data("Qt", 10));
data.add(new PieChart.Data("SQL", 17));

PieChart pie = new PieChart(data);
pie.setTitle("PieChart Tutorial 2017");
pie.setLegendSide(Side.LEFT);
pie.setTitleSide(Side.BOTTOM);
pie.setLabelLineLength(60);
pie.setLabelsVisible(true);

StackPane root = new StackPane(pie);
Scene scene = new Scene(root, 800, 600);

primaryStage.setTitle("JavaFX PieChart");
primaryStage.setScene(scene);
primaryStage.show();

Al ejecutar obtenemos el siguiente resultado:

Crear un PieCHart en JavaFX

Agregar Tooltip a cada sección

Cada sección del gráfico esta representada con un objeto de tipo Node, podemos obtener cada uno de ellos y personalizarlo, en nuestro caso agregaremos un Tooltip a cada uno, de esta manera cuando el usuario ubique el ratón sobre la sección esta mostrará una ventana informativa, para nosotros solo contendrá el nombre y el valor correspondiente a cada sección.

public void installTooltip(PieChart.Data d) {

    String msg = String.format("%s : %s", d.getName(), d.getPieValue());

    Tooltip tt = new Tooltip(msg);
    tt.setStyle("-fx-background-color: gray; -fx-text-fill: whitesmoke;");
    
    Tooltip.install(d.getNode(), tt);
}

Luego de crear el PieChart llamamos a este método, usando getData() obtenemos las distintas secciones.

pie.getData().forEach(this::installTooltip);

Ejecutamos y ubicamos el ratón sobre una sección, por ejemplo JavaFX, veremos:

PieChart con Tooltip

Otra forma de configurar las gráficas es usando CSS por ejemplo:

.chart {
    -fx-clockwise: false;
    -fx-pie-label-visible: true;
    -fx-label-line-length: 25;
    -fx-start-angle: 90;
    -fx-legend-side: right;
}

.chart-pie-label {
    -fx-font-size: 14px;
    -fx-font-family: Roboto Light;
}

.chart-pie-label-line {
    -fx-fill: red;
}

.chart-title {
    -fx-font-family: Roboto;
    -fx-font-size: 28px;
}

.chart-legend-item-symbol {
    -fx-shape: "M0 -3.5 v7 l 4 -3.5z";
}

.chart-legend {
    -fx-background-color: #f0e68c;
    -fx-background-radius: 4px;
    -fx-border-color: #696969;
    -fx-border-width: 1;
    -fx-border-radius: 4px;
}

Provoca los siguientes cambios:

PieChart mediante CSS

Usando la clase chart-legend-item-symbol cambiamos el SVG que define el símbolo que se muestra en la leyenda, las demás clases modifican el tamaño y fuente de las etiquetas y los títulos, también podemos definir un color personalizado para cada sección de la gráfica y incluso colocarle una imagen de fondo.

Descargar demo: piechart-javafx.zip

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

tkinter Canvas

Controles y Contenedores JavaFX 8 - I

Conectar SQL Server con Java