Изменение пробела между строками в метках тиков

#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));