Anotações em um gráfico JFreeChart Pie
-
05-07-2019 - |
Pergunta
Especificamente eu estou olhando para adicionar anotações de texto para locais específicos para um JFreeChart que está sendo saída para um arquivo png para o uso da web. Pode / como fazer anotações são adicionados para gráficos de pizza. Eu tenho sido capaz de adicionar com sucesso anotações para XYPlots, mas não sei como a sobreposição ou adição a um PiePlot.
A minha tarefa completa é usar o PiePlot para criar uma espécie de relógio. Até agora tudo tem funcionado muito bem, mas agora eu preciso adicionar etiquetas às 12, 3, 6 e 9 locais o'clock e completamente perplexo.
Adam
Solução 2
Depois de uma busca bastante extenuante Eu não acredito que este é actualmente possível (JFreeChart 1.0.13). As opções possíveis são:
Crie uma segunda tabela com uma XYPlot para gerar uma segunda imagem com anotações necessárias. Overlay esta imagem na página. Esta opção é ruim porque duplica o número de imagens de gráfico a ser carregado.
Definir a imagem como fundo da página e HTML o texto sobre a imagem. Bad porque não é sustentável e faz uma dor de cabeça de transferência de dados.
Pessoalmente, eu estou indo só para encontrar outra maneira de comunicar as informações no título, mas eu queria postar meus resultados para a próxima pessoa. Adam
Outras dicas
Um pouco de uma questão antiga, mas aqui está como eu fiz algo semelhante (anotação em 1, 2, 3, ... horas posições), utilizando um diagrama polar. Ele usa um ChoiceFormatter eo 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
acaba parecendo http://img522.imageshack.us/img522/6693/ hapihours.jpg