在Java中,如何在另一个信号上绘制峰值阵列?
在Java应用程序中,我有一个ECG信号和该信号的R峰值存储在一个数组中。峰值作为ECG信号的样本指数给出 我想用另一种颜色标出心电图的峰值。我目前的代码只显示心电图曲线,但峰值却看不到。它没有给出任何错误,但一定是出了什么问题在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);
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);}可以用替换内部循环
。这与您的代码基本相同,但哈希集是构建的,因此包含的检查非常快。如果内部循环消失,代码会更清晰。对于您的实际问题,我无法提供答案,但最好提及您正在使用的库。