Annotazioni su un grafico a torta JFreeChart
-
05-07-2019 - |
Domanda
In particolare sto cercando di aggiungere annotazioni di testo in posizioni specifiche a un JFreeChart che viene emesso in un file png per uso web. Può / come vengono aggiunte le annotazioni ai grafici a torta. Sono stato in grado di aggiungere correttamente annotazioni a XYPlot, ma non so come sovrapporre o aggiungerne uno a un PiePlot.
Il mio compito completo è usare PiePlot per creare una sorta di orologio. Finora tutto ha funzionato alla grande, ma ora ho bisogno di aggiungere etichette nelle posizioni 12, 3, 6 e 9 e completamente sconcertato.
Adam
Soluzione 2
Dopo una ricerca abbastanza faticosa non credo che questo sia attualmente possibile (JFreeChart 1.0.13). Le opzioni possibili sono:
Crea un secondo grafico con un XYPlot per generare una seconda immagine con le annotazioni necessarie. Sovrapponi questa immagine alla pagina. Questa opzione è negativa perché raddoppia il numero di immagini del grafico da caricare.
Imposta l'immagine come sfondo della pagina e HTML il testo sopra l'immagine. Cattivo perché non è gestibile e crea mal di testa nel trasferimento dei dati.
Personalmente sto solo cercando un altro modo per comunicare le informazioni nel titolo, ma volevo pubblicare i miei risultati per la persona successiva. Adam
Altri suggerimenti
Un po 'di una vecchia domanda, ma ecco come ho fatto qualcosa di simile (annotazione alle posizioni 1, 2, 3, ... in punto) usando un diagramma polare. Utilizza ChoiceFormatter e 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
finisce come http://img522.imageshack.us/img522/6693/ hapihours.jpg