Примечания на круговой диаграмме JFreeChart
-
05-07-2019 - |
Вопрос
В частности, я хочу добавить текстовые аннотации к определенным местоположениям в JFreeChart, которые выводятся в файл png для использования в Интернете.Можно ли / как добавлять аннотации к круговым диаграммам.Мне удалось успешно добавить аннотации к XYPlots, но я не знаю, как наложить или добавить аннотации к круговой диаграмме.
Моя полная задача - использовать круговую диаграмму для создания своего рода часов.До сих пор все работало отлично, но теперь мне нужно добавить метки в местах расположения 12, 3, 6 и 9 часов, и я совершенно зашел в тупик.
Адам
Решение 2
После довольно напряженных поисков я не верю, что в настоящее время это возможно (JFreeChart 1.0.13).Возможными вариантами являются:
Создайте вторую диаграмму с помощью XYPlot, чтобы сгенерировать второе изображение с необходимыми аннотациями.Наложите это изображение на страницу.Этот параметр плох, потому что он удваивает количество загружаемых изображений диаграмм.
Установите изображение в качестве фона на странице и поверх изображения текст в формате HTML.Плохо, потому что это не поддается сопровождению и создает головную боль при передаче данных.
Лично я просто собираюсь найти другой способ донести информацию, содержащуюся в названии, но я хотел опубликовать свои выводы для следующего пользователя.Адам
Другие советы
Немного старый вопрос, но вот как я сделал нечто подобное (аннотация в 1, 2, 3, ...положения часов) с использованием полярного графика.Он использует ChoiceFormatter и 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
заканчивается тем, что выглядит как http://img522.imageshack.us/img522/6693/hapihours.jpg