나는 100,000 개가 넘는 레코드가있는 2 차원 배열을 가지고 있습니다. 내가 차트를 만들려고 할 때 - 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);
}
하나의 차트에 100k 비트의 데이터를 완전 정밀도로 표시하는 것이 가능하지 않으며, 평균화 또는 다른 방법으로 데이터를 제한하는 경우 동일한 차트가 표시됩니다. 훨씬 짧은 기간에 또한 병목 현상이 정확히 어디에서 발생했는지 확인하기 위해 프로그램을 프로파일 링 했습니까? –
표시하는 동안 (어쩌면 스케일링), 나머지는 모두 정상적으로 실행됩니다. 문제는 크기가 조정되고 원본 크기의 데이터로 작업해야하기 때문에 자동으로 크기를 조정하는 것이 바람직합니다. – wanderlust