0

ティック単位が日である TimeSeries チャートがあります。グラフを作成すると、データが 8 日以上に及ぶ場合、すべて問題ありません。線が描かれ、日付軸の目盛りラベルのそれぞれが日を示します。
ただし、データが 4 日以下の場合、Ticks または TickLabels が重複します。だから私は同じ日に2ティックを持っています。これを説明したい:

データは 8 日間にわたる:

ラベル: 月曜日、火曜日、水曜日、木曜日、金曜日、土曜日、日曜日、月曜日、

データは 4 日間にわたる:

ラベル: 月曜日、月曜日、火曜日、火曜日、水曜日、水曜日、木曜日、木曜日、金曜日

グラフのサイズを縮小して、日付に 1 つの目盛りとラベルのみを使用する方法はありますか?

     private void presentCharts(final MapDataParameter mapDataParameter)
{
    if (getRestrictionHistoryMap() != null && !getRestrictionHistoryMap().isEmpty())
    {
        final JFreeChart restrChart = ChartFactory.createTimeSeriesChart(
                X_AXIS_LABEL_TOP,
                X_AXIS_LABEL_BOTTOM,
                Y_AXIS_LABEL_LEFT,
                createCummulatedDataset(),
                true,
                true,
                false);

        final XYPlot pplot = restrChart.getXYPlot();
        setPlot(pplot);
        getPlot().setDataset(1, createCountDataset());
        getPlot().mapDatasetToRangeAxis(1, 1);
        getPlot().setDomainGridlinesVisible(true);
        getPlot().setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
        Color plotBackgroundColor = new Color(208, 205, 205);
        getPlot().setBackgroundPaint(plotBackgroundColor);
        // valueAxis is for cummulated (right y axis)
        final ValueAxis valueAxis = new NumberAxis(Y_AXIS_LABEL_RIGHT);
        valueAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        getPlot().setRangeAxis(1, valueAxis);


        final XYBarRenderer xyBarRenderer = new XYBarRenderer();
        getPlot().setDatasetRenderingOrder(DatasetRenderingOrder.REVERSE);
        // Hintergrund stylen
        Color boundingBackgroundColor = new Color(238, 238, 238);
        restrChart.setBackgroundPaint(boundingBackgroundColor);
        // Datensätze den renderern zuweisen
        final StandardXYItemRenderer standardXyItemRenderer = new StandardXYItemRenderer();
        getPlot().setRenderer(0, standardXyItemRenderer);
        getPlot().setRenderer(1, xyBarRenderer);
        // nur Ganzzahlige Schritte
        ValueAxis valueAxis2 = getPlot().getRangeAxis(0);
        valueAxis2.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        // Datumsformat einstellen
        final DateAxis dateAxis = (DateAxis) pplot.getDomainAxis();
        dateAxis.setDateFormatOverride(new SimpleDateFormat("dd.MMM.yyyy", mapDataParameter.getLocale()));
        // test
        Range range = new Range(1.1d, 19.9d);
        dateAxis.setRange(range, true, true);
        // Zeige die Anzahl über dem Balken
        XYItemLabelGenerator labelGenerator = new XYItemLabelGenerator()
        {
            @Override
            public String generateLabel(XYDataset xyd, int i, int i1)
            {
                Number tmp = xyd.getY(i, i1);
                String label = "" + tmp.intValue();
                return label;
            }
        };
        // set this at the renderer of the count dataset
        if (getPlot().getRendererCount() > 1)
        {
            getPlot().getRenderer(0).setSeriesPaint(0, CUMMULATED_COLOR);
            getPlot().getRenderer(1).setPaint(COUNTCOLOR);
            getPlot().getRenderer(1).setBaseItemLabelGenerator(labelGenerator);
            getPlot().getRenderer(1).setBaseItemLabelsVisible(true);
        }
        // dauert länger, als ohne, macht aber nichts
        restrChart.setAntiAlias(true);
        setChart(restrChart);
4

0 に答える 0