5 votes

Évitez les valeurs nulles dans l'ensemble de données pour le graphique en ligne

Je essaie de tracer un LineChart en utilisant DefaultCategoryDataset et le problème auquel je suis confronté est, lorsque j'essaie de tracer une valeur nulle entre deux valeurs, soit la connexion entre les deux points est perdue (c'est-à-dire que la ligne reliant les deux points n'apparaît pas), soit je dois sauter la valeur nulle (en effectuant une vérification nulle sur chaque point dans DataSet) afin de connecter les deux autres points, ce qui fait que le point de l'axe des x n'est pas tracé sur mon graphique.

Par exemple: si j'ai Unité1, Unité2, Unité3 sur l'axe des x et certaines valeurs, disons 10, 20, 30 pour chacune, cela fonctionne bien et trace une ligne inclinée. Mais au lieu de 20 dans l'Unité2, si je mets null, je n'obtiens que deux points tracés sur mon graphique sans qu'une ligne ne relie ces deux points.

Pour obtenir la ligne tracée, je dois sauter le point de l'Unité2 de mon axe des x. Mais ce que je veux faire, c'est relier l'Unité1 à l'Unité3 sans sauter l'Unité2 (et sa valeur reste nulle), je ne veux pas tracer 0 à la place de null.

Y a-t-il un moyen de faire cela ?

1voto

Martin Höller Points 806

Vous pourriez utiliser deux ensembles de données presque identiques mais deux renderers différents.

Le premier ensemble de données doit contenir toutes les données, y compris les valeurs null. Configurez un renderer pour cet ensemble de données afin de dessiner uniquement des formes (mais pas de lignes). Vous obtiendrez une forme pour chaque point de données qui n'est pas `null`.

Le deuxième ensemble de données ne doit contenir que des données qui ne sont pas null. Configurez un autre renderer pour cet ensemble de données afin de dessiner uniquement des lignes (mais pas de formes). Vous obtiendrez une ligne qui saute simplement le point de données null mais qui est continue.

Le code pour cela pourrait ressembler à ceci:

// créez votre graphique ici...

// configurez le premier renderer
LineAndShapeRenderer renderer = LineAndShapeRenderer) plot.getRenderer();
    renderer.setBaseShapesVisible(true);
    renderer.setBaseLinesVisible(false);

// configurez le deuxième renderer
LineAndShapeRenderer renderer2 = new LineAndShapeRenderer(true, false);
plot.setDataset(1, dataset2);
plot.setRenderer(1, renderer2);

Cordialement,
- martin

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X