Bonjour à tous,
J'ai un problème avec l'utilisation des JFreeChart. Globalement, j'ai compris le fonctionnement en subdivision Chart/Plot/Serie/DataSet/Renderer mais j'arrive dans un cas un peu complexe:
J'ai une courbe (TimeSerie) qui représente mes donnée en fonction du temps.
Mes données quand à elles possèdent un indice de confiance de type booléen pour chaque échantillons (OK==true, ProbablementOK==false).
Ce que je souhaiterais c'est que le rendu de ma courbe soit par exemple:
- courbe continue si OK.
- courbe pointillée sinon.
J'ai voulue me lancer dans la définition de 2 renderer (un pour la partie Ok et un pour l'autre) et traiter mes points comme suis:
Ce qui au final fait qu'en fond j'ai ma courbe complête et que par dessus je créer des masquage "pointiller" avec des portion de courbe NOK.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Algo: Pour tout mes point de ma courbe Faire: ---Ajouter dans une Serie avec le Renderer OK ---Si confiance NOK Faire: -------Si Point Précédent OK ----------Creer nouvelle serie avec renderer NOK -------FSI -------Ajouter point à la dernière serie NOK ---FSI FPour
Bon déjà comme vous devez vous le dire, ça ne pourra pas fonctionner et vous avez bien raison. Cette algo une fois mis en codage deviens rapidement une usine à gaz et je n'ai donc pas pu le mener au bout.
Du coup ma question: Y a-t-il une façon simple pour dire "de x1 à x2 la courbe sera ainsi, de x2 à x3 comme ça, etc ...." (avec xi mes abscisses)
Ce qui réduirait au final à une timeSerie avec un renderer variable
Voila, désolé si l'énoncé est long mais c'est un problème que j'ai du mal a formuler clairement et donc encore plus de mal a coder ^^'.
Merci d'avance,
Schou
PS: une piste que j'ai vue serait d'utiliser le XYItemPaint comme dans le codage si dessous, mais je n'y comprend rien donc je suis preneur de tout conseils
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class DifferenceBarRenderer extends BarRenderer { public DifferenceBarRenderer() { super(); } public Paint getItemPaint(int x_row, int x_col) { CategoryDataset l_jfcDataset = getPlot().getDataset(); String l_rowKey = (String)l_jfcDataset.getRowKey(x_row); String l_colKey = (String)l_jfcDataset.getColumnKey(x_col); double l_value = l_jfcDataset.getValue(l_rowKey, l_colKey).doubleValue(); if (l_value < 0.0) { return Color.red; } else { return Color.green; } } }
Partager