JfreeChart настроить двойной рендеринг по оси Y - PullRequest
0 голосов
/ 12 марта 2012

Я создаю диаграмму с двойной осью Y.

  Dataset[] dataset = ChartsBuilder.createChartDatasets(chartModelType);
 JFreeChart chart = ChartFactory.createBarChart(chartModelType.getChartName(), // chart title
                chartModelType.getDomainAxisLabel(), // domain axis label
                chartModelType.getRangeAxisLabel(), // range axis label
                (CategoryDataset)dataset[0], // data
                chartModelType.getPlotOrientation(), // orientation
                true, // include legend
                true, // tooltips?
                false // URLs?
                );

        // set the background color for the chart...
        chart.setBackgroundPaint(Color.white);

        // get a reference to the plot for further customisation...
        CategoryPlot plot = (CategoryPlot)chart.getPlot();
        // set the range axis to display integers only...
        NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

        // // disable bar outlines...
        // if (reportChart.getRenderer() != null) {
        // plot.setRenderer((CategoryItemRenderer)reportChart.getRenderer());
        // }
        // ((CategoryPlot)chart.getPlot()).setRenderer(new BarRenderer3D());
        BarRenderer renderer = (BarRenderer)plot.getRenderer();
        renderer.setDrawBarOutline(true);
        renderer.setMaximumBarWidth(.05);
        // set up gradient paints for series...
        GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 0, 64));
        renderer.setSeriesPaint(0, gp0);

        CategoryAxis domainAxis = plot.getDomainAxis();
        domainAxis.setCategoryMargin(0.1f);
        // domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI
        // / 6.0));
        if (dataset[1] != null) {
            final NumberAxis axis2 = new NumberAxis(chartModelType.getSecondRangeAxisLabel());
            plot.setDataset(1, (CategoryDataset)dataset[1]);
            plot.mapDatasetToRangeAxis(1, 1);
            plot.setRangeAxis(1, axis2);
            plot.setRangeAxisLocation(1, AxisLocation.BOTTOM_OR_RIGHT);
            final BarRenderer renderer2 = new BarRenderer();
            renderer2.setDrawBarOutline(true);
            renderer2.setMaximumBarWidth(.05);
            plot.setRenderer(1, renderer2);
        }
        return chart;

в результате у меня есть что-то вроде 2 слоев на моем графике, и если я пытаюсь получить подсказку от renderer2, то я получаю подсказку от ближайшего бара 1-го визуализатора.

enter image description here

На самом деле у меня есть два вопроса:

  1. Можно ли установить оба набора данных в 1 рендере, но масштабировать его в соответствии с собственной осью Y;

  2. Если 1 - невозможно, как я могу настроить точку подсказки для каждого средства визуализации (чтобы увидеть непосредственно, что я хочу).

...