#java #charts #jfreechart
#java #Диаграммы #jfreechart
Вопрос:
Мне нужно реализовать новый «графический генератор». Чтобы проиллюстрировать это требование, я покажу пример вывода с использованием старого генератора и вывода того, который я пытаюсь разработать (или где я получил до сих пор).
Моя главная проблема сейчас — это пробел между строками в метках тиков. Изображение должно быть размером 600×150, поэтому мне нужно максимально сжать текстовую часть графики (она не обязательно должна быть визуально красивой), но я пока не смог найти ни одного подходящего кода.
На самом деле мне нужно устранить как можно больше «пробелов». Если у кого-нибудь есть подсказка, как реализовать следующее, я был бы очень признателен:
- Удалите пробел между заголовком диаграммы и самой диаграммой;
- Удалите пробел между метками тиков и нижним концом изображения;
- Удалите светло-серую линию, которая представляет тики в нижней части диаграммы. Прямо сейчас метки тиков и эта строка перекрываются.
Это код, который я использую для настройки диаграммы:
CategoryPlot categoryplot = lineChart.getCategoryPlot();
lineChart.setTitle(
new org.jfree.chart.title.TextTitle(lineChart.getTitle().getText(),
new Font("SansSerif", Font.PLAIN, 10)
)
);
lineChart.setBackgroundPaint(Color.white);
categoryplot.setBackgroundPaint(Color.WHITE);
CategoryAxis domainAxis = new CategoryAxis();
domainAxis.setMaximumCategoryLabelLines(4);
categoryplot.setDomainAxis(domainAxis);
Font font = new Font("Courier", Font.PLAIN, 8);
categoryplot.getDomainAxis().setTickLabelFont(font);
categoryplot.getDomainAxis().setCategoryLabelPositionOffset(-6);
categoryplot.getDomainAxis().setTickLabelInsets(
new RectangleInsets(1.0, 1.0, 1.0, 1.0));
NumberAxis yAxis = (NumberAxis) categoryplot.getRangeAxis();
yAxis.setAutoRangeIncludesZero(false);
categoryplot.getRenderer().setSeriesStroke(
1,
new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {6.0f, 6.0f}, 0.0f
)
);
categoryplot.setDomainGridlinesVisible(true);
categoryplot.setRangeGridlinesVisible(true);
categoryplot.setDomainGridlinePaint(Color.GRAY);
categoryplot.setRangeGridlinePaint(Color.GRAY);
categoryplot.getRenderer().setSeriesStroke(
2,
new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {6.0f, 6.0f}, 0.0f
)
);
categoryplot.getRenderer().setSeriesPaint(0, Color.BLUE);
categoryplot.getRenderer().setSeriesPaint(1, Color.RED);
categoryplot.getRenderer().setSeriesPaint(2, Color.RED);
LineAndShapeRenderer renderer = (LineAndShapeRenderer) categoryplot.getRenderer();
renderer.setBaseShapesVisible(true);
renderer.setDrawOutlines(true);
renderer.setUseFillPaint(true);
renderer.setBaseFillPaint(Color.white);
renderer.setSeriesShape(0, new Ellipse2D.Double(-5, -5, 10, 10));