我正在绘制多达16条迹线,每条迹线有300个数据点,我每100毫秒连续更新100个数据点。因此,平均而言,我每100毫秒更新1600个数据点,并且达到了我可以实时绘制的点的极限。有没有什么方法可以提高绘图速度,或者点数确实达到了JChart2D可以达到的极限。
作为一个注释,JChart2D比其他库更好地用作实时应用程序的JFreeChart。 JFreeChart功能强大,但实时非常繁重。
每当向swing工作人员通知已添加数据时,我实际使用的循环如下:
for (int l = 0; l < readcycles; l++){
sixteenBitNumber = data[l];
for (int k = 0; k < (SampledSignalPerPacket); k+=ScreenPointJump){
for (int o = 0; o < root.getChildCount(); o++){
for (int p = 0; p < graphnodes[o].getChildCount(); p++){
if (seriesindex[o][p] > ScreenSize){
seriesindex[o][p] = 0;
}
datapoint = (float)(sixteenBitNumber[signalnodes[o][p].signalIndex + NbOfSampledSignal*k])*10/32767;
trace[o][p].addPoint(seriesindex[o][p], datapoint);
seriesindex[o][p] = seriesindex[o][p] + ScreenPointJump;//seriesindex[o][p]++;
}
}
}
}
其中trace已初始化为
public Trace2DLtd[][] trace = new Trace2DLtd[4][4];
答案 0 :(得分:0)
你可以这样做而不是addPoint线吗? 我可能错了..
datapoint = (float)(sixteenBitNumber[signalnodes[o][p].signalIndex + NbOfSampledSignal*k])*10/32767;
//trace[o][p].addPoint(seriesindex[o][p], datapoint);
avgX[o][p]+=seriesindex[o][p]; //Accumulate
avgY[o][p]+=datapoint; //Accumulate
avgCounter[o][p]++; //Keep track
if(avgCounter[o][p]==10){ //Done accumulating... plot average
trace[o][p].addPoint(avgX[o][p]/10, avgY[o][p]/10); //Add average point
avgCounter[o][p]=0; //Clear data
avgX[o][p]=0; //Clear data
avgY[o][p]=0; //Clear data
}
seriesindex[o][p] = seriesindex[o][p] + ScreenPointJump;//seriesindex[o][p]++;
}
}
}
}