[Jfreechart] Superposition ou décalage de colonne.
Bonjour,
Voici de nombreuses tentatives que j'effectue sur un problème de graphique avec Jfreechart. Le problème étant le suivant :
Je récupère des valeurs et monte 3 datasets différents :
Load
Capacity
Sum
Les datasets sont bien remplies et ne sont pas erronées.
J'affiche 2 types de graphique différents dans ma chart
Ici deux solutions :
Solutions n°1 :
J'affiche le load en fonciton de l'année et la sum en fonction de l'année dans un "LayeredBarRenderer", afin de pouvoir superposer les deux barres.
J'affiche la capacity en fonction de l'année avec un renderer "LineAndShapeRenderer" au dessus du graphique ( ce graphique là marche )
Solutions n°2
J'affiche le load en fonciton de l'année et la sum en fonction de l'année dans un "BarRenderer", afin de pouvoir mettre les deux barres l'un a coté de l'autre pour chaque année.
J'affiche la capacity en fonction de l'année avec un renderer "LineAndShapeRenderer" au dessus du graphique ( ce graphique là marche )
Le souci étant qu'à l'heure actuelle, je peux afficher sans soucis mon "LineAndShapeRenderer" ainsi que le Load mais le Sum s'affiche pas ou se superpose derriere.
Pour accompagner mon problème, les qq lignes de code qui me posent soucis :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| //CAPA : construction de la coubre CAPACITE
final LineAndShapeRenderer rendererCapa = new LineAndShapeRenderer();
rendererCapa.setStroke(new BasicStroke(1.5f));
rendererCapa.setPaint(new Color(0x226644));
rendererCapa.setShape(ShapeUtilities.createDiamond(4f));
final StackedBarRenderer labelrendererCapa = new StackedBarRenderer();
labelrendererCapa.setItemLabelPaint(new Color(0x226644));
labelrendererCapa.setItemLabelGenerator(new CapacityItemLabelGenerator());
labelrendererCapa.setPositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.TOP_CENTER));
labelrendererCapa.setBaseItemLabelsVisible(true);
labelrendererCapa.setOutlinePaint(Color.WHITE);
labelrendererCapa.setPaint(Color.WHITE);
labelrendererCapa.setItemLabelFont(new Font("Arial", Font.PLAIN, 10));
vPlot.setDataset(0, lCapaData); // lCapaData est le dataset de CAPA
vPlot.setRenderer(0, rendererCapa);
vPlot.setDataset(2, lCapaData); // lCapaData est le dataset de CAPA
vPlot.setRenderer(2, labelrendererCapa);
ValueAxis lAxis = new NumberAxis();
lAxis.setInverted(true);
lAxis.setVisible(false);
lAxis.setRange(0, 10000);
lAxis.setAxisLineVisible(true);
vPlot.setRangeAxis(1, lAxis);
vPlot.mapDatasetToRangeAxis(2, 1);
//CONTRUSCTION DE LA BARRE LOAD
LayeredBarRenderer rendererLoad = new LayeredBarRenderer();
rendererLoad.setBaseItemLabelFont(new Font("Arial", Font.PLAIN, 10));
rendererLoad.setPaint(Color.YELLOW);
rendererLoad.setSeriesBarWidth(1, 1.0);
rendererLoad.setItemMargin(0.01);
//CONSTRUCTION DE LA BARRE SUM
LayeredBarRenderer rendererSum = new LayeredBarRenderer();
rendererSum.setSeriesBarWidth(3, 0.5);
rendererSum.setPaint(Color.BLUE);
rendererSum.setItemMargin(0.01);
// Affichage dans le graphique
vPlot.setDataset(1, lLoadData); //lLoadData est le dataset du load
vPlot.setRenderer(1, rendererLoad);
vPlot.setDataset(1, lSumData); //lSumData est le dataset du sum
vPlot.setRenderer(1, rendererSum);
// Construction axis.
CategoryAxis vAxis = new CategoryAxis();
Color AXIS_COLOR = new Color(0x00080);
vAxis.setCategoryMargin(0.25);
vAxis.setLowerMargin(0.05);
vAxis.setUpperMargin(0.05);
vAxis.setMaximumCategoryLabelLines(10);
vAxis.setTickMarkPaint(AXIS_COLOR);
vAxis.setAxisLinePaint(AXIS_COLOR);
vAxis.setAxisLineVisible(true);
vAxis.setLabelPaint(AXIS_COLOR);
vAxis.setTickLabelPaint(AXIS_COLOR);
vPlot.setDomainAxis(vAxis);
// Construction upper axis.
NumberAxis vAxisNumber = new NumberAxis();
vAxisNumber.setUpperMargin(0.15);
vAxisNumber.setAxisLinePaint(AXIS_COLOR);
vAxisNumber.setAxisLineVisible(true);
vAxisNumber.setTickLabelPaint(AXIS_COLOR);
vPlot.setRangeAxis(vAxisNumber);
// Writing Graph : Une fonction à part qui permet d'afficher le graphe sous forme d'image png à uen dimension donnée.
writeChartResponse(vChart, pResponse); |
Ceci me donne un graphique de ce genre :
http://nsa05.casimages.com/img/2009/...2835767422.jpg
Donc comme on peut le constater ici :
Seul la capacité et le load sont présent. Le Sum n'apparait pas.
En vous remerciant par avance pour toute aide et disponible pour les interrogations à ce sujet.
Cordialement,
Croumir