1

我正在绘制多达 16 条迹线,每条迹线有 300 个数据点,我每 100 毫秒连续更新 100 个数据点。因此,平均而言,我每 100 毫秒更新总共 1600 个数据点,这已经达到了我可以实时绘制的点的极限。有什么方法可以提高绘图速度或点数真的达到了 JChart2D 所能达到的极限。

需要注意的是,对于实时应用程序,JChart2D 比 JFreeChart 等其他库要好得多。JFreeChart 具有强大的功能,但对于实时来说相当繁重。

每当通知摇摆工人已添加数据时,我实际使用的循环如下:

            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]++;
                        }                               
                    }
                }   

            }

其中跟踪已被初始化为

public Trace2DLtd[][] trace =  new Trace2DLtd[4][4];
4

1 回答 1

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]++;
                }                               
            }
        }   

    }
于 2014-06-16T19:24:15.790 回答