TimeSeries
에 데이터를 추가하기 전에 차트를 만들고 있습니까? 차트가 생성/표시 된 후에 데이터를 추가하는 경우 각 포인트가 추가 된 후 plot
이 다시 그려집니다. 당신이 loadFirst = true
을 설정하면이 화면에 그려진되기 전에 차트가 약 3K 데이터 포인트를 추가
import java.text.SimpleDateFormat;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeriesDataItem;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class TimeSeriesDemo1 extends ApplicationFrame {
private static TimeSeries s1;
private static boolean loadFirst;
public TimeSeriesDemo1(String title) {
super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
if (!loadFirst){
Runnable task = new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {}
int count = 0;
for (int year = 2000 ; year < 2010 ; year++){
for (int month = 1 ; month < 13 ; month++){
for (int day = 1 ; day < 29 ; day++){
final TimeSeriesDataItem di = new TimeSeriesDataItem(new Day(day, month, year), Math.random() * 20);
count++;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
s1.add(di);
}
});
}
}
}
System.out.println("After the chart is created " + count);
}
};
Thread th = new Thread(task,"Load Data"){
};
th.start();
}
}
private static JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createTimeSeriesChart(
"Large Dataset Demo", // title
"Date", // x-axis label
"Value", // y-axis label
dataset, // data
true, // create legend?
true, // generate tooltips?
false // generate URLs?
);
XYPlot plot = (XYPlot) chart.getPlot();
DateAxis domainAaxis = (DateAxis) plot.getDomainAxis();
domainAaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy"));
return chart;
}
private static XYDataset createDataset() {
s1 = new TimeSeries("Random Data");
int count = 0;
if (loadFirst){
for (int year = 2000 ; year < 2010 ; year++){
for (int month = 1 ; month < 13 ; month++){
for (int day = 1 ; day < 29 ; day++){
final TimeSeriesDataItem di = new TimeSeriesDataItem(new Day(day, month, year), Math.random() * 20);
count++;
s1.add(di);
}
}
}
System.out.println("Before the chart is created " + count);
}
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(s1);
return dataset;
}
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
loadFirst = true;
TimeSeriesDemo1 demo = new TimeSeriesDemo1("Large Time Series Demo ");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
});
}
}
:
이 예를 생각해 보자.
설정 loadFirst = false
그것은 그들이 나중에 더 이상 복용 추가합니다.
당신은 성능의 차이를 볼 수 있습니다. 어떤 방법을 사용하고 있는지 예제로는 명확하지 않습니다.
데이터를로드하기 전에 차트를 표시하는 경우 가능한 경우 순서를 바꿔보십시오.
더 빠른 컴퓨터를 구입하십시오 .- 심각하게 말하자면 : 플롯을 어떻게 만드는지 몇 가지 코드를 보여줄 수 있습니까? 또는 그것이 느린 것으로 의심되는 곳? 물론 – Dirk
예. 내 질문에 게시 할 예정입니까? – Abdousoft
이 줄이없는 for 루프의 속도는 다음과 같습니다. dataset.addSeries (series [i]); ? – Averroes