나는 데이터가 여기에있다, 대한 플롯을 만들고 다음 코드가 데이터
data<-lidar
x<-lidar$range
y<-lidar$logratio
h<-20
par(mfrow=c(2,2))
r<-max(x)-min(x)
bn<-ceiling(r/h)
binwidth=c(5,10,30,100)
#Creates a matrix to handle the data of same length
W<-matrix(nrow=length(x),ncol=bn)
for (j in 1:bn){
for (i in 1:length(x)){
if (x[i]>=(min(x)+(j-1)*h) && x[i]<=(min(x)+(j)*h)){W[i,j]=1}
else {W[i,j]=0}
}
}
#Sets up the y-values of the bins
fit<-rep(0,bn)
for (j in 1:bn){
fit[j]<- sum(y*W[,j]/sum(W[,j]))
}
#Sets up the x values of the bins
t<-numeric(bn)
for (j in 1:bn){
t[j]=(min(x)+0.5*h)+(j-1)*h
}
plot(x,y)
lines(t,fit,type = "S", col = 1, lwd = 2)
이것은 페이지의 왼쪽 모서리에 단일 플롯을 만듭니다.
par(mfrow=c(2,2))
h 값 5,10,30,100 (변수 binwidth에서 제공하는 값)을 사용하여 한 페이지에 4 개의 그래프를 그리는 for 문을 만드는 방법이 있습니까? 그래서 수동으로 h 값을 변경할 필요가 없습니다. 새 플롯을 재현 할 때마다 최종 결과가 다음과 같이 나타납니다.
기본적으로 저는 항상 h를 변경하지 않고 4 개의 결과를 모두 플로팅하는 다른 for 문을 사용하여 다른 h 값으로 코드를 4 번 실행하고 싶습니다. 어떤 도움이나 힌트라도 대단히 감사합니다.
다음은 URL에서 직접 데이터를로드 한 다음 apply
패밀리를 사용하여 다른 플롯을 반복 하는 완전히 재현 가능한 예제입니다.
lidar <- read.table(paste0("http://www.stat.cmu.edu/%7Elarry",
"/all-of-nonpar/=data/lidar.dat"),
header = TRUE)
par(mfrow = c(2, 2))
breaks <- lapply(c(5, 10, 30, 100), function(i) {
val <- seq(min(lidar$range), max(lidar$range), i)
c(val, max(val) + i)})
means <- lapply(breaks, function(i) {
vals <- tapply(lidar$logratio,
cut(lidar$range, breaks = i, include.lowest = TRUE), mean)
c(vals[1], vals)})
invisible(mapply(function(a, b) {
plot(lidar$range, lidar$logratio)
lines(a, b, type = "S", lwd = 2)
}, breaks, means))
reprex 패키지 (v0.3.0)에 의해 2020-09-25에 생성됨
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다