У меня есть двумерный массив с более чем 100 000 записей. Когда я пытаюсь нарисовать диаграмму, CPU сильно нагружен, и ничего больше не происходит. Я проверил все возможные способы, включая сглаживание, отключение прослушивателей событий и т. Д. Ничего не работает. И я предполагаю, что производительность около 3-5 минут (хорошо, это относительная вещь, но я хотел бы знать, как ее достичь).Отображение огромного набора данных в JFreeChart
Поэтому я спрашиваю, есть ли способ правильно отобразить данные? У меня две функции, одна для определения диаграммы, а другой для его построения:
public void plotXYChart(double dArray[][], String sPlotName, String sSeriesName,
String sRangeName){
XYSeries series1 = new XYSeries(sSeriesName);
series1.clear();
for (int i=0; i< dArray.length; i++){
series1.add(dArray[i][0], dArray[i][1], false);
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.removeAllSeries();
dataset.addSeries(series1);
dataset.setAutoWidth(false);
dataset.setIntervalWidth(2000);
chart = ChartFactory.createXYLineChart(sPlotName, sSeriesName, sRangeName,
dataset, PlotOrientation.VERTICAL, false,
true, false);
chart.setAntiAlias(false);
XYPlot plot = (XYPlot) chart.getPlot();
plot.getDomainAxis().setStandardTickUnits(new StandardTickUnitSource());
plot.getRangeAxis().setStandardTickUnits(new StandardTickUnitSource());
SamplingXYLineRenderer renderer = new SamplingXYLineRenderer();
plot.setRenderer(renderer);
plotChart(sPlotName, chart);
}
private void plotChart(String sPlotName, JFreeChart chart){
if (this.cPanel!=null)
cPanel.setChart(chart);
else
cPanel = new ChartPanel(chart);
cPanel.setAutoscrolls(false);
cPanel.setDomainZoomable(false);
cPanel.setRangeZoomable(false);
cPanel.setRefreshBuffer(false);
cPanel.setDoubleBuffered(rootPaneCheckingEnabled);
this.chartFrame.add(cPanel);
this.chartFrame.pack();
if (this.chartFrame.isVisible() == false)
RefineryUtilities.centerFrameOnScreen(this.chartFrame);
this.chartFrame.setVisible(true);
}
Я не думаю, что можно полностью отображать 100 тыс. Бит данных для полной точности на одной диаграмме, и если вы каким-то образом ограничили данные путем усреднения или каким-либо другим способом, вы получите тот же график в гораздо более короткий период времени. Кроме того, вы профилировали свою программу, чтобы увидеть, где именно находится ваше узкое место? –
Где-то во время отображения (возможно, масштабирования) все остальное работает нормально. Дело в том, что мне приходится работать с масштабированными и оригинальными данными размера, поэтому для меня предпочтительнее масштабировать его автоматически. – wanderlust