如何在R中绘制方波数据?

时间:2016-03-10 22:12:23

标签: r

考虑以下数据,其中左列表示位(1或0),右列表示我们观察该位的微秒数。

0 664
1 63
0 404
1 544
0 651
1 686
0 507
1 1155
0 664
1 271
0 456
1 2763
0 664
1 115
0 456
1 4010
0 664
1 63
0 351
1 3855

我想绘制这样的数据,使得水平线为0,宽度为664,然后上升到水平线为1,宽度为63,然后下降到水平线为0,宽度为404,依此类推。

是否有高效并直接在R中绘制此图,而不涉及手动比较边界?

这是我目前的代码,这是非常低效和天真的,所以我希望有更好的方法。

args <- commandArgs(trailingOnly = TRUE)
data = read.table(args[1])
current = 1
sumA = 0

pf = function(x) {
    if (x < sumA) {
        return(data[current,1])
    }

    for (i in  current: length(data[,1])) {
        sumA <<- sumA + data[i,2]
        if (x < sumA) {
            current <<- i + 1
            return(data[i,1])
        }
    }
    return("OUT OF BOUNDS")
}
cumSum = colSums(data)[[2]]
print(cumSum - 1);


h = Vectorize(pf)
plot(h, 1, cumSum-1, n=cumSum-1, lwd=0.001, xlim=c(0,cumSum-1))

1 个答案:

答案 0 :(得分:6)

正如我的评论所述,plot command type标志设置为s应该可以解决问题。

例如,您首先10样本:

x <- c(0,664,63,404,544,651,686,507,1155,664,271)
xC <- cumsum(x)
y <- c(0,1,0,1,0,1,0,1,0,1,0)
plot(xC,y,type='s')

enter image description here