在Java中,如何在另一个信号上绘制峰值阵列?

在Java中,如何在另一个信号上绘制峰值阵列?,java,android,graph,Java,Android,Graph,在Java应用程序中,我有一个ECG信号和该信号的R峰值存储在一个数组中。峰值作为ECG信号的样本指数给出 我想用另一种颜色标出心电图的峰值。我目前的代码只显示心电图曲线,但峰值却看不到。它没有给出任何错误,但一定是出了什么问题 public void ConfigureGraph() { final GraphView graph = findViewById(R.id.graphview); graph.getViewport().setScalable(true);

在Java应用程序中,我有一个ECG信号和该信号的R峰值存储在一个数组中。峰值作为ECG信号的样本指数给出

我想用另一种颜色标出心电图的峰值。我目前的代码只显示心电图曲线,但峰值却看不到。它没有给出任何错误,但一定是出了什么问题

 public void ConfigureGraph() {
   final GraphView graph = findViewById(R.id.graphview);
   graph.getViewport().setScalable(true);

    LineGraphSeries<DataPoint> series1 = new LineGraphSeries<>();
    LineGraphSeries<DataPoint> series2 = new LineGraphSeries<>();

   series1.setDrawDataPoints(true);
   series2.setDrawDataPoints(true);
   series2.setDataPointsRadius(10);
   series2.setThickness(8);

   ArrayList<Double> myDatan=readFileNorm(); //This is my ECG
   LinkedList<Integer> myPeaks= PanTompkins.findPeaks(myDatan); //Those are my peaks

   int numberofdatapoints = 20000;
   double x=0;
   double y;

   for(int i=0; i<numberofdatapoints; i++){ //Plot the ECG
       x = x + 0.004;
       y = myDatan.get(i);
       series1.appendData(new DataPoint(x,y),true,20000);

       for(int p=0; p<myPeaks.size(); p++) { //Add the peaks to plot
           if(y == myPeaks.get(p)){
               series2.appendData(new DataPoint(x,y),true,20000);
           }
       }
   }

   graph.addSeries(series1);
   graph.addSeries(series2);
}
public void ConfigureGraph(){
最终图形视图图形=findViewById(R.id.GraphView);
graph.getViewport().setScalable(true);
LineGraphSeries系列1=新的LineGraphSeries();
LineGraphSeries系列2=新的LineGraphSeries();
系列1.setDrawDataPoints(真);
序列2.setDrawDataPoints(真);
系列2.setDataPointsRadius(10);
系列2.设置厚度(8);
ArrayList myDatan=readFileNorm();//这是我的心电图
LinkedList myPeaks=PanTompkins.findPeaks(myDatan);//这些是我的峰值
int numberofdatapoints=20000;
双x=0;
双y;

对于(inti=0;iBtw,我想把for循环放到for循环中,自己画出峰值——但不知何故,我需要x轴与ECG的x轴相匹配。如果你知道如何更容易地做到这一点,请告诉我!你可以用
替换内循环。这样你就可以添加
集peakSet=新的HashSet(myPeaks);
位于计算峰值的行下方。然后可以使用
if(peakSet.contains(y)){series2.appendData(新的数据点(x,y),true,20000);}
。这与您的代码基本相同,但哈希集是构建的,因此
包含的检查非常快。如果内部循环消失,代码会更清晰。对于您的实际问题,我无法提供答案,但最好提及您正在使用的库。顺便说一句,我考虑删除f或者在for循环中循环,只需自己绘制峰值-但我不知何故需要x轴与ECG的x轴相匹配。如果您对如何以更简单的方式实现这一点有任何想法,请告诉我!您可以使用
替换内循环。这样您就可以添加
集peakSet=new HashSet(myPeaks)
在计算峰值的行下方。然后,如果(peakSet.contains(y)){series2.appendData(新数据点(x,y),true,20000);}可以用
替换内部循环
。这与您的代码基本相同,但哈希集是构建的,因此
包含的检查非常快。如果内部循环消失,代码会更清晰。对于您的实际问题,我无法提供答案,但最好提及您正在使用的库。