문제

후반 이이 공식에 맞는 바 플로트가 있습니다.y~a엑스exp(-b*x^2). 이제 나는 전체 바 플로트를 플로팅하고 해당 부분에 대해서만 보유하고있는 Barplot의 마지막 부분에 적합 모델을 표시하고 싶습니다. 그러나 하반기에 만 라인 그래프를 표시하는 방법을 찾을 수 없습니다. 내가 그냥 같은 일을한다면


submitted=c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 3L, 2L, 1L, 1L, 4L, 
3L, 2L, 11L, 6L, 2L, 16L, 7L, 17L, 36L, 27L, 39L, 41L, 33L, 42L, 
66L, 92L, 138L, 189L, 249L, 665L, 224L, 309L, 247L, 641L, 777L, 
671L, 532L, 749L, 506L, 315L, 292L, 281L, 130L, 137L, 91L, 40L, 
27L, 34L, 19L, 1L)
x=seq(0:(length(submitted)-1))
y1=rs$submitted[30:(length(submitted)-1)]
x1=seq(0:(length(y1)-1))
fit1=nls(y1~a*x1*exp(-b*x1^2),start=list(a=500,b=.01),trace=TRUE)
barplot(submitted,names.arg=x, las=2, cex.axis=0.8, cex=0.8)
lines(predict(fit1))

선은 표시되지만 잘못된 위치에 있습니다. 그렇다면 선이 그려진 위치를 어떻게 제어 할 수 있습니까?

도움이 되었습니까?

해결책

재현 가능한 예는 도움이되었을 것입니다. 그러나 아마도 문제는 바가 당신이 기대하는 X- 코디네이트에 위치하지 않는다는 것입니다. 당신은 바의 출력을 캡처하여 막대의 X- 코디네이트를 찾을 수 있습니다. barplot 기능:

dat <- 1:5                   # fake data for barplot
fit <- dat+rnorm(5, sd=0.1)  # fake fitted values

bp <- barplot(dat)           # draw plot and capture x-coordinates
lines(bp, fit)               # add line

편집하다:
부분 선을 추가하는 데 동일한 원칙을 사용할 수 있습니다. 인덱스를 얻으려면 코드를 약간 다시 작성하십시오 idx 모델링하려는 데이터의 부분 표시 :

x <- 0:(length(submitted)-1) 
idx <- 30:(length(submitted)-1)  # the part of the data to be modeled
y1 <- submitted[idx] 
x1 <- idx-30 
fit1 <- nls(y1~a*x1*exp(-b*x1^2),start=list(a=500,b=.01),trace=TRUE) 
# capture the midpoints from the barplot
bp <- barplot(submitted,names.arg=x, las=2, cex.axis=0.8, cex=0.8) 
# subset the midpoints to the range of the fit
lines(bp[idx], predict(fit1)) 

(나도 변경되었습니다 seq(0:n) 에게 0:n, 첫 번째는 당신에게 0에서 n의 시퀀스를 제공하지 않기 때문에.)

다른 팁

Aniko의 답을 가져 와서 특정 문제로 재구성하십시오. 데이터를 사용했습니다 submitted 게시 한대로.

변수 정의 :

y1 <- submitted[30:(length(submitted)-1)]
x1 <- seq(length(y1))

만 사용하는 것만으로도 충분합니다 seq() 이런 식으로 기능하십시오. 그것은 이미 당신을 위해 일을합니다. 그런 다음 착용감을하고 x- 값을 캡처합니다. barplot() Aniko가 언급했듯이. x- 값을 매트릭스에 저장하므로 사용합니다. as.vector() 그 후 벡터로 바꾸고 조금 더 쉽게 만들 수 있습니다.

fit1 <- nls(y1~a*x1*exp(-b*x1^2),start=list(a=500,b=.01),trace=TRUE)
bar <- barplot(submitted, las=2, cex.axis=0.8, cex=0.8)
bar2 <- as.vector(bar)

단순히 인쇄한다면 bar2 정확한 값이 표시되며 이제 플롯에 적합한 위치를 지정할 수 있습니다. 다음과 같이 확인하십시오 lines() 함수 X- 벡터의 길이는 y-vector와 동일합니다. 예를 들어 length() 기능. 다음은 Barplot의 후반부에 배치 된 것입니다.

lines(x = bar2[30:(length(bar2)-1)], y = predict(fit1))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top