Этот вопрос является продолжением моего предыдущего вопроса, касающегося отсутствия отображения данных . После приведенных рекомендаций я попытался построить меньший диапазон данных. Как было замечено, когда я работаю с диапазоном данных другого размера, время рендеринга быстро увеличивается. Последний (более или менее) приемлемый набор данных (который загружается в память, но не предназначен для черчения) содержит 16 тыс. Значений. В случае, если мне нужно построить только 100 из них, время рендеринга также огромно.
Код генерации графика выглядит следующим образом:
public void plotXYChart(double dArray[][], String sPlotName, String sSeriesName,
String sRangeName, int iInitialPoint, int iPlotLength){
XYSeries series1 = new XYSeries(sSeriesName);
series1.clear();
series1.setNotify(false);
if (iInitialPoint+iPlotLength > dArray.length){
iPlotLength = dArray.length;
} else {
iPlotLength+=iInitialPoint;
}
for (int i=iInitialPoint; i < iPlotLength; i++){
series1.add(dArray[i][0], dArray[i][1], false);
}
System.out.println("Elements in series: " + series1.getItemCount());
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.removeAllSeries();
dataset.addSeries(series1);
System.out.println("Elements in dataset: " + dataset.getItemCount(0));
chart = null;
chart = new JFreeChart(new XYPlot(dataset, new NumberAxis(sSeriesName),
new NumberAxis(sRangeName), new SamplingXYLineRenderer()));
plotChart(sPlotName, chart);
XYPlot plot = (XYPlot) chart.getPlot();
plot.getDomainAxis().setStandardTickUnits(new StandardTickUnitSource());
plot.getRangeAxis().setStandardTickUnits(new StandardTickUnitSource());
}
Код для JFramePanel, который используется для вывода диаграммы, следующий:
private void plotChart(String sPlotName, JFreeChart chart){
if (this.cPanel!=null) {
cPanel.setChart(chart);
}
else
cPanel = new ChartPanel(chart, true);
this.chartFrame.add(cPanel);
if (this.chartFrame.isVisible() == false){
RefineryUtilities.centerFrameOnScreen(this.chartFrame);
}
this.chartFrame.pack();
this.chartFrame.setVisible(true);
}
Я хотел бы спросить об улучшении времени рендеринга, потому что сейчас я застрял с этой проблемой.