Линии рассеяния JFreeChart - PullRequest
11 голосов
/ 13 марта 2011

Я пытаюсь создать график с JFreeChart, однако он не дает правильных линий.Вместо того, чтобы соединять точки в том порядке, в котором я их расположил, он соединяет точки в порядке их значений x.Я использую ChartFactory.createScatterPlot для создания графика и XYLineAndShapeRenderer для установки видимых линий.

/ edit: sscce:

package test;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;

public class PlotTest {
    private XYSeriesCollection dataset;

    public static void main (String[] args) {
        new PlotTest();
    }

    public PlotTest () {
        dataset = new XYSeriesCollection();
        XYSeries data = new XYSeries("data");
        data.add(3, 2); //Point 1
        data.add(1, 1); //Point 2
        data.add(4, 1); //Point 3
        data.add(2, 2); //Point 4
        dataset.addSeries(data);
        showGraph();
    }

    private void showGraph() {
        final JFreeChart chart = createChart(dataset);
        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
        final ApplicationFrame frame = new ApplicationFrame("Title");
        frame.setContentPane(chartPanel);
        frame.pack();
        frame.setVisible(true);
    }

    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart chart = ChartFactory.createScatterPlot(
            "Title",                  // chart title
            "X",                      // x axis label
            "Y",                      // y axis label
            dataset,                  // data
            PlotOrientation.VERTICAL,
            true,                     // include legend
            true,                     // tooltips
            false                     // urls
        );
        XYPlot plot = (XYPlot) chart.getPlot();
        XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
        renderer.setSeriesLinesVisible(0, true);
        plot.setRenderer(renderer);
        return chart;
    }

}

Теперь я хочу, чтобы программа соединяла точки впорядок 1-2-3-4, то есть порядок, в который я добавил их в свой набор данных.Но я подключаю их в порядке 2-4-1-3, отсортированном по x-значению.

Ответы [ 2 ]

11 голосов
/ 14 марта 2011

Попробуйте это:

 final XYSeries data = new XYSeries("data",false);

Использование этого конструктора для XYSeries отключает автосортировку, как определено в XYSeries API .

До:

Before

После того, как:

After

2 голосов
/ 13 марта 2011

Отсутствует sscce Сложно сказать, но вы можете попробовать вернуть DomainOrder.NONE из вашей реализации XYDataset. Кроме того, это может помочь узнать, какое значение следует придавать линиям, соединяющим точки на точечной диаграмме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...