Цвет не изменяется для разных наборов данных диаграммы - PullRequest
0 голосов
/ 27 августа 2018
XYSeriesCollection dataset = new XYSeriesCollection();

XYSeries validKoordinates = new XYSeries("Not dangerous");
for (SimulationResult sr : validSR.values()) {
     validKoordinates.add(sr.getMinTTC(), sr.getMinTHW());  //x,y
}

dataset.addSeries(validKoordinates);
JFreeChart chart = chart = ChartFactory.createScatterPlot(
            "Distribution of THW and TTC Values",
            "TTC", "THW", dataset);

//Changes background color
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(new Color(255, 228, 196));
plot.getRendererForDataset(plot.getDataset(0)).setSeriesPaint(0, Color.GRAY);

XYSeriesCollection dataset2 = new XYSeriesCollection();
XYSeries warningKoordinates = new XYSeries("Very critical");
for (SimulationResult sr : criticalSR.values()) {
    warningKoordinates.add(sr.getMinTTC(), sr.getMinTHW());  //x,y
}
dataset2.addSeries(warningKoordinates);

plot.setDataset(1, dataset2);
plot.getRendererForDataset(plot.getDataset(1)).setSeriesPaint(0, Color.RED);

Итак, у меня есть два разных набора данных (набор данных 1 и набор данных 2). Каждый набор данных содержит разные значения. Моя цель - изменить цвет набора данных 1 на серый, а цвет второго - на красный. (НО форма должна быть такой же). В начале у меня был только один набор данных с двумя XYSeries. Проблема в то время заключалась в том, что форма была разной для каждого XYSeries. Теперь у меня противоположная проблема. Форма остается, но цвет не меняется.

Вот как выглядит мой стол прямо сейчас:

chart

Как вы можете видеть прямо сейчас, я не могу отделить, какой из них очень критичен, а какой нет.

1 Ответ

0 голосов
/ 27 августа 2018

Найдено, что требуется только один dataSet, все серии должны быть добавлены к dataSet. И используя первый параметр setSeriesPaint для настройки цвета серии. Поскольку версия jfreeChart не предоставлена, я использовал 1.0.12. Код отредактирован для тестирования.

public static void main(String[] args) throws IOException {
        XYSeriesCollection dataset = new XYSeriesCollection();

        int[][] sr = new int[3][2];
        for (int i = 0; i < sr.length; i++) {
            sr[i][0] = i + 3;
            sr[i][1] = 2 * (i + 1) + 1;
        }
        XYSeries validKoordinates = new XYSeries("Not dangerous");
        XYSeries warningKoordinates = new XYSeries("Very critical");
        System.out.println(sr.length);
        for (int i = 0; i < sr.length; i++) {
            validKoordinates.add(sr[i][0], sr[i][1]);
        }
        for (int i = 0; i < sr.length; i++) {
            warningKoordinates.add(sr[i][0]+1, sr[i][1]+1);
        }
        // Add dataset for all series
        dataset.addSeries(validKoordinates);
        dataset.addSeries(warningKoordinates);
        // Only reference one dataset
        JFreeChart chart = ChartFactory.createScatterPlot("Distribution of THW and TTC Values", "TTC", "THW", dataset,
                PlotOrientation.HORIZONTAL, true, true, true);
        XYPlot plot = (XYPlot) chart.getPlot();

        plot.setBackgroundPaint(new Color(255, 228, 196));
        // Change the index of setSeriesPaint to set color
        plot.getRendererForDataset(dataset).setSeriesPaint(0, Color.GRAY);
        plot.getRendererForDataset(dataset).setSeriesPaint(1, Color.RED);

        BufferedImage objBufferedImage = chart.createBufferedImage(600, 800);
        ByteArrayOutputStream bas = new ByteArrayOutputStream();
        try {
            ImageIO.write(objBufferedImage, "png", bas);
        } catch (IOException e) {
            e.printStackTrace();
        }

        byte[] byteArray = bas.toByteArray();
        InputStream in = new ByteArrayInputStream(byteArray);
        BufferedImage image = ImageIO.read(in);
        File outputfile = new File("testimage.png");
        ImageIO.write(image, "png", outputfile);
    }

Изображение, сгенерированное вышеуказанным методом enter image description here

...