Anotaciones en un gráfico circular JFreeChart
-
05-07-2019 - |
Pregunta
Específicamente, estoy buscando agregar anotaciones de texto a ubicaciones específicas en un JFreeChart que se está enviando a un archivo png para uso web. ¿Se pueden agregar las anotaciones a los gráficos circulares? He podido agregar con éxito anotaciones a XYPlots, pero no sé cómo superponer o agregar una a un PiePlot.
Mi tarea completa es usar PiePlot para crear una especie de reloj. Hasta ahora todo ha funcionado muy bien, pero ahora necesito agregar etiquetas en las ubicaciones de las 12, 3, 6 y 9 en punto y estoy completamente perplejo.
Adán
Solución 2
Después de una búsqueda bastante extenuante, no creo que esto sea posible actualmente (JFreeChart 1.0.13). Las posibles opciones son:
Cree un segundo gráfico con un XYPlot para generar una segunda imagen con las anotaciones necesarias. Superponga esta imagen en la página. Esta opción es mala porque duplica la cantidad de imágenes de gráficos que se cargarán.
Establezca la imagen como fondo en la página y HTML el texto sobre la imagen. Mal porque no es mantenible y causa un dolor de cabeza en la transferencia de datos.
Personalmente, voy a encontrar otra forma de comunicar la información en el título, pero quería publicar mis hallazgos para la siguiente persona. Adán
Otros consejos
Un poco de una vieja pregunta, pero así es como hice algo similar (anotación en las posiciones 1, 2, 3, ... en punto) usando un diagrama polar. Utiliza un ChoiceFormatter y la NumberTickUnit:
final JFreeChart chart = ChartFactory.createPolarChart(
"HAPI Hourly Usage (UTC)", ds, true, true, false);
final PolarPlot plot = (PolarPlot) chart.getPlot();
// Create a ChoiceFormat to map the degrees to clock positions
double[] limits = new double[12];
String[] formats = new String[12];
limits[0] = 0;
formats[0] = "12";
// degrees = 360/12
for (int i = 1; i < limits.length; i++) {
limits[i] = degrees * (i);
formats[i] = Integer.toString(i);
}
ChoiceFormat clock = new ChoiceFormat(limits, formats);
TickUnit tickUnit = new NumberTickUnit(degrees, clock);
// now configure the plot
plot.setAngleTickUnit(tickUnit); // sets the ticks
plot.setAngleLabelsVisible(true); // makes the labels visible
plot.setAngleLabelPaint(Color.LIGHT_GRAY); // user choice
plot.setAngleGridlinesVisible(true); // must set this to display the
// labels
plot.setAngleGridlinePaint(Color.BLACK); // plot's background color
// (makes lines invisible)
plot.setRadiusGridlinesVisible(false); //turn off the radius value circles
ValueAxis axis = plot.getAxis();
axis.setTickLabelsVisible(false); //turn off the radius value labels
termina pareciéndose a http://img522.imageshack.us/img522/6693/ hapihours.jpg