pie - Java JFreeChart Category Step Chart horizontal(imagen a explicación)
line chart jfreechart example (1)
Necesito el siguiente tipo de gráfico:
Debe ser un gráfico de líneas "escalonado" con categorías en el eje vertical, como esta:
Encontré este ejemplo de un gráfico de pasos de categoría, pero la orientación no es adecuada para mi propósito.
Todo lo que he hecho hasta ahora es esto, pero como pueden ver, la línea roja no se ajusta a la orientación del gráfico (debe ser horizontal):
El código correspondiente a esto:
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);
No lo hago funcionar. ¿Algunas ideas?
¡Gracias por adelantado!
Parece que necesita usar un XYLineChart estándar con un XYStepRenderer
y un SymbolAxis
para reemplazar el Range Axis predeterminado en lugar de un CategoryStepRenderer
y una orientación horizontal del plot
Si asocia el estado A y B con un valor numérico, por ejemplo 1 y 2, puede crear un gráfico como este:
Usando esto un 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);
y un 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);
En este ejemplo, SymbolAxis
proporciona una etiqueta alternativa para cada valor en el Eje