2015-02-17 8 views
1

Мне нужно построить график рассеяния, но с такими категориями, как все точки в классе, категория должна быть красной, или форма точки может быть квадратной, чтобы отличить ее от очков класса b, но я также не хочу, чтобы точки, которые должны быть соединены линиями, как в XYPlot. Я искал его и не смог найти ответ, поэтому, если вы обнаружите это как дублирующийся вопрос, пожалуйста, направить меня к оригинальному. СпасибоJfreechart разброс участка с категориями

+0

Что вы пробовали? Отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) для получения справки. – alex2410

+0

Почему бы не использовать библиотеки графических объектов JavaFX? – SomethingSomething

+0

Я пробовал это: http://www.tutorialspoint.com/jfreechart/jfreechart_xy_chart.htm, и это почти удовлетворяет мою потребность, но дело в том, что я не хочу, чтобы линии соединяли точки, но я хочу, чтобы точки из разных наборов данных отличались друг от друга , –

ответ

0

Я играл с разбросанным сюжетом и смог решить проблему. следующий код решает его. setupData() принимает имя класса как входное и в основном его классифицирует. Я этого раньше не видел. Надеюсь, это поможет ребятам, которые сталкиваются с такой же проблемой.

package graph.generator; 


import java.util.ArrayList; 

import org.jfree.chart.ChartFactory; 
import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.plot.PlotOrientation; 
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 GenerateScatterPlot extends ApplicationFrame{ 

    static XYSeriesCollection dataset; 

    public GenerateScatterPlot(String applicationTitle) { 
     super(applicationTitle); 
     JFreeChart chart = ChartFactory.createScatterPlot("Coordinates", "X", "Y", setupData(), PlotOrientation.VERTICAL,true,true,false); 
     NumberAxis domainAxis = (NumberAxis) chart.getXYPlot().getDomainAxis(); 
     domainAxis.setAutoRangeIncludesZero(false); 
     ChartPanel chartPanel = new ChartPanel(chart); 
     chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); 
     chartPanel.setVerticalAxisTrace(true); 
     chartPanel.setHorizontalAxisTrace(true); 
     setContentPane(chartPanel); 
    } 

    public static XYDataset setupData() { 
     return dataset; 
    } 

    public static void addToSet(ArrayList<ArrayList<Double>> coordinates, String classOfData) 
    { 
     if(dataset == null) 
     { 
      dataset = new XYSeriesCollection(); 
     } 

     XYSeries series = new XYSeries(classOfData); 
     for (ArrayList<Double> arrayList : coordinates) { 
      series.add(arrayList.get(0),arrayList.get(1)); 
     } 

     dataset.addSeries(series); 
    } 
} 
Смежные вопросы