我想为具有一些不连续性的函数生成线图。我的功能是由模拟的布朗运动路径形成的,如下所示:
t <- 1:100
std <- 0.01
x <- rnorm(n = length(t) - 1, sd = sqrt(std))
x <- c(0, cumsum(x))
#add in some discontinuities
x[25:35] <- x[25:35] + 0.2
x[45:55] <- x[45:55] - 0.5
我的方法是用plot(0, xlim = c(-49,50), ylim = c(-2, 2))
设置一个空图,然后尝试通过
lines((-49):(-25), x[1:25])
lines((-25):(-15), x[25:35])
lines((-15):(-5), x[35:45])
lines((-5):5, x[45:55])
lines(5:50, x[55:100])
问题是结果图是连续的。由于某种原因,R连接图中应该是不相交的部分。我该如何抑制这种行为?
非常感谢!
答案 0 :(得分:1)
同样,由于您的x和y长度不同,您的一些lines
命令会出现错误(例如,在lines((-15):5, x[35:45])
中,-15:5
长度为21个元素,而x[35:45]
为11个元素很长,还有一些其他lines
来电。)
但是,您的问题是,当您绘制线条时,包括两个lines
来电中的“断点”。
首先,让我们构建一些更简单的数据......
x <- 1:10
y <- c(1:5, 10:15)
绘制第一段:
plot(x[1:5], y[1:5], xlim=range(x), ylim=range(y), type='l') # type='l' draws a line
请注意,您正在进行下一个细分为x[6:10]
,不 x[5:10]
。
lines(x[6:10], y[6:10])
你得到:
所以基本上在绘制细分时,请确保它们实际上彼此不同(因为lines
和plot
绘制包含的结束点):
e.g。而不是:
行(( - 49):( - 25),x [1:25]) (( - 25):( - 15),x [25:35])
使用
行(( - 49):( - 25),x [1:25]) (( - 24):( - 15),x [26:35])#&lt; - 删除重叠
等等。