2017-12-09 14 views
0

R 함수는 stock (아래)입니다. 함수의 각 실행 결과 (plot())가 함수의 이전 실행에서 플롯 맨 위에 플롯 (즉, 추가) 될 수있는 방법이 될 수 있는지 궁금합니다. (코드 아래 그림이 표시 될 수 있습니다)R 함수의 이전 실행에서 플롯 위에 선 세그먼트를 그립니다.

stock = function(m, s){ 

loop = length(s) 

I = matrix(NA, loop, 2) 

for(i in 1:loop){ 
I[i,] = quantile(rbeta(1e2, m, s[i]), c(.025, .975)) 
} 
plot(rep(1:loop, 2), I[, 1:2], ty = "n", ylim = 0:1, xlim = c(1, loop)) 

segments(1:loop, I[, 1], 1:loop, I[, 2]) 
} 
# Example of use: 
stock(m = 2, s = c(1, 10, 15, 20, 25, 30)) 
stock(m = 50, s = c(1, 10, 15, 20, 25, 30)) #The result of this run be plotted on top of previous run above 

enter image description here

+0

사실, 당신의 제 1 및 제 2 실행에 대한 플롯은 서로 겹치는 것입니다. 두 줄이 아니라 한 줄로 표시됩니다. – G5W

+0

예, 이해합니다. 그러나 두 번째 플롯의 y 값은 첫 번째 플롯의 y 값보다 높지 않습니다. 둘 모두를 그려 보면 한 줄로 함께 그려지면 하나의 줄로 보이지 않고 한 줄로 보일 것입니다. 당신은 임의로 두 번째 것을 위로 움직이기를 원합니 까? – G5W

답변

2

간단한이 옵션에 대한 인수를 추가하는 것입니다. 기본적으로 이 이전 프레임에 추가되므로 새로운 plot()을 수행하지 않아도됩니다.

stock = function(m, s, add=FALSE) { 

    loop = length(s) 
    I = matrix(NA, loop, 2) 

    for(i in 1:loop) { 
     I[i,] = quantile(rbeta(1e2, m, s[i]), c(.025, .975)) 
    } 
    if (!add) { 
     plot(rep(1:loop, 2), I[, 1:2], ty = "n", ylim = 0:1, xlim = c(1, loop)) 
    } 
    segments(1:loop, I[, 1], 1:loop, I[, 2], xpd = NA) 
} 

# Example of use: 
set.seed(1) 
stock(m = 2, s = c(1, 10, 15, 20, 25, 30)) 
stock(m = 50, s = seq(1, 90, 10), add=TRUE) 

enter image description here