Java JFreeChart Catégorie Étape Graphique horizontal (image à expliquer)
j'ai besoin du type de graphique suivant:
Il devrait s'agir d'un graphique linéaire "gradué" avec des catégories sur l'axe vertical, comme ceci:
J'ai trouvé cet exemple de graphique d'étape de catégorie, mais l'orientation n'est pas adaptée à mon objectif.
Tout ce que j'ai fait jusqu'à présent est le présent, mais comme vous pouvez le voir la ligne rouge à ne pas ajustement à l'orientation du graphique (doit être horizontal):
Le code correspondant à ceci:
DefaultCategoryDataset ds = new DefaultCategoryDataset();
// create dataset
for (int k = 0; k < ffCount; k++) {
StateSignal ss1 = (StateSignal) this.ffDSet.getFframes().get(k).getSignals().get(i);
ds.setValue((double) k + 1, ss1.getName(), ss1.getStates().get(0).getStatus());
}
CategoryStepRenderer categorysteprenderer = new CategoryStepRenderer(false);
categorysteprenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
CategoryAxis categoryaxis = new CategoryAxis("Category");
NumberAxis numberaxis = new NumberAxis("Value");
CategoryPlot categoryplot = new CategoryPlot(ds, categoryaxis, numberaxis, categorysteprenderer);
categoryplot.setRangePannable(true);
categoryplot.setOrientation(PlotOrientation.HORIZONTAL);
chart = new JFreeChart("test", null, categoryplot, true);
Je ne le fais pas fonctionner. Des idées?
Merci d'avance!
1 answers
Il semble que vous deviez utiliser un XYLineChart standard avec un XYStepRenderer
et un SymbolAxis
pour remplacer l'axe de plage par défaut plutôt qu'un CategoryStepRenderer
et une orientation de tracé horizontal
Si vous associez les statuts A et B à une valeur numérique, par exemple 1 et 2, vous pouvez créer un graphique comme ceci:
En utilisant cette a XYStepRenderer
XYStepRenderer renderer = new XYStepRenderer();
renderer.setBaseShapesVisible(true);
renderer.setSeriesStroke(0, new BasicStroke(2.0f));
renderer.setSeriesStroke(1, new BasicStroke(2.0f));
renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
renderer.setDefaultEntityRadius(6);
plot.setRenderer(renderer);
Et a Symbol Axis
String[] grade = new String[3];
grade[0] = "";
grade[1] = "Status A";
grade[2] = "Status B";
SymbolAxis rangeAxis = new SymbolAxis("", grade);
rangeAxis.setTickUnit(new NumberTickUnit(1));
rangeAxis.setRange(0,3);
plot.setRangeAxis(rangeAxis);
Dans cet exemple, le SymbolAxis
fournit une étiquette alternative pour chaque valeur de l'axe