Комбинированные диаграммы с FastScatterPlot и LineChart @ JFreeChart с большими данными (6,8 миллиона записей ~ 80 МБ)

#java #charts #jfreechart #scatter-plot #bigdata

#java #Диаграммы #jfreechart #точечная диаграмма #bigdata

Вопрос:

мне нравится отображать FastScatterPlot в сочетании с линейной диаграммой. Возможно ли каким-либо образом объединить эти диаграммы в комбинированный график? К сожалению, это не похоже на руководство для разработчиков?! По крайней мере, здесь нет примера. Кажется, что это возможно только с набором XYDataset, но вместо FastScatterPlot, который использует двумерный массив для хранения данных, набор XYDataset должен быть заполнен методом add (), например:

 DefaultXYDataset dataset = new DefaultXYDataset();    
XYSeries dataSeries = new XYSeries("series 1");
dataSeries.add(xValue, yValue); //populate data: 6.8 million entries!
dataset.addSeries(new String(), dataset )
JFreeChart chart = ChartFactory.createScatterPlot("normaler scatterplot test", "X", "Y", dataset, PlotOrientation.HORIZONTAL, true,false, false);
ChartPanel chartPanel = new ChartPanel(chart, true);
getContentPane.add(chartPanel);
  

что приводит к замедлению и в конечном итоге приводит к переполнению стека (размер кучи уже составляет 512 МБ)! Поэтому я использую FastScatterPlot, который успешно отображает диаграмму. Но, как уже упоминалось, я не знаю, как объединить это, например, с линейной диаграммой. Вот сокращенный код на данный момент:

 double[][] data = new double[2][6800000]; //6.8 million entries!!!! static data!
//populate data ...
FastScatterPlot plot = new FastScatterPlot(data, new NumberAxis("X"), new NumberAxis("Y"));
JFreeChart chart = new JFreeChart("Fast Scatter Plot", plot);
ChartPanel chartPanel = new ChartPanel(chart, true);
getContentPane.add(chartPanel);
  

Комментарии:

1. Вы пытаетесь создать график с комбинированной осью или наложенный график?

2. Вы пробовали использовать series.add(x, y, false) метод вместо add(x, y) ? Замедление может быть вызвано SeriesChangeEvent который запускается при вызове add(x, y) метода.