developer tip

격자 : 하나의 창에 여러 플롯이 있습니까?

optionbox 2020. 11. 24. 07:54
반응형

격자 : 하나의 창에 여러 플롯이 있습니까?


levelplot설정을 사용하여 하나의 창에 여러 격자 플롯을 넣으려고하는데 par(mfrow=c(2,1))이것을 무시하는 것 같습니다.

여러 플롯을 설정하는 특정 기능이 lattice있습니까?


'lattice'패키지는 그리드 패키지에 빌드되며 'lattice'가로드 될 때 네임 스페이스를 연결합니다. 그러나 grid.layout함수 를 사용하기 위해서는 명시 적으로 load()pkg :: grid 가 필요 합니다. 아마도 더 쉬운 다른 대안 grid.arrange은 pkg :: gridExtra 함수입니다.

 install.packages("gridExtra")
 require(gridExtra) # also loads grid
 require(lattice)
 x <- seq(pi/4, 5 * pi, length.out = 100)
 y <- seq(pi/4, 5 * pi, length.out = 100)
 r <- as.vector(sqrt(outer(x^2, y^2, "+")))

 grid <- expand.grid(x=x, y=y)
 grid$z <- cos(r^2) * exp(-r/(pi^3))
 plot1 <- levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="",
           ylab="", main="Weird Function", sub="with log scales",
           colorkey = FALSE, region = TRUE)

 plot2 <- levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="",
           ylab="", main="Weird Function", sub="with log scales",
           colorkey = FALSE, region = TRUE)
 grid.arrange(plot1,plot2, ncol=2)

여기에 이미지 설명 입력


격자 패키지는 종종 (항상은 아니지만)은 무시 승 / 플롯 할 때 난 그냥 그것을 사용하지 않도록 명령을 격자 .

단일 페이지에 여러 격자 플롯을 배치하려면 :

  • 격자 / 격자 플롯 객체를 생성 (플로팅하지는 않음)한 다음

  • 각 플롯에 대해 한 번씩 print 호출

  • 인쇄 호출에 대해 (i) 플롯에 대한 인수를 전달 합니다 . (ii) more , TRUE로 설정되고 print 에 대한 초기 호출에만 전달되며 (iii) pos 는 플롯의 왼쪽 하단에 대해 xy 좌표 쌍으로 지정된 페이지에서 각 플롯의 위치를 ​​제공합니다. 모서리와 오른쪽 위 모서리, 즉 4 개의 숫자가있는 벡터.

말하는 것보다 보여주기가 훨씬 쉽습니다.

data(AirPassengers)     # a dataset supplied with base R
AP = AirPassengers      # re-bind to save some typing

# split the AP data set into two pieces 
# so that we have unique data for each of the two plots
w1 = window(AP, start=c(1949, 1), end=c(1952, 1))
w2 = window(AP, start=c(1952, 1), end=c(1960, 12))

px1 = xyplot(w1)
px2 = xyplot(w2)

# arrange the two plots vertically
print(px1, position=c(0, .6, 1, 1), more=TRUE)
print(px2, position=c(0, 0, 1, .4))

일단 읽으면 간단합니다 ?print.trellis. 특히 흥미로운 것은 split매개 변수입니다. 처음에는 복잡해 보일 수 있지만 의미를 이해하면 아주 간단합니다. 문서에서 :

split : 4 개의 정수 c (x, y, nx, ny)로 구성된 벡터로, nx x ny 플롯의 정규 배열에서 x, y 위치에 현재 플롯을 배치합니다. (참고 : 왼쪽 상단에 원점이 있습니다.)

에서 몇 가지 구현을 볼 수 example(print.trellis)있지만 여기에 내가 선호하는 구현이 있습니다.

library(lattice)

# Data
w <- as.matrix(dist(Loblolly))
x <- as.matrix(dist(HairEyeColor))
y <- as.matrix(dist(rock))
z <- as.matrix(dist(women))

# Plot assignments
pw <- levelplot(w, scales = list(draw = FALSE))  # "scales..." removes axes
px <- levelplot(x, scales = list(draw = FALSE))
py <- levelplot(y, scales = list(draw = FALSE))
pz <- levelplot(z, scales = list(draw = FALSE))

# Plot prints
print(pw, split = c(1, 1, 2, 2), more = TRUE)
print(px, split = c(2, 1, 2, 2), more = TRUE)
print(py, split = c(1, 2, 2, 2), more = TRUE)
print(pz, split = c(2, 2, 2, 2), more = FALSE)  # more = FALSE is redundant

위의 코드는이 그림을 제공합니다. 레벨 플롯

보시다시피, split4 개의 매개 변수를 사용합니다. 마지막 두 (것과 유사하여 프레임의 크기를 참조 mfrow반면, 않습니다) 처음 두 매개 변수는에 플롯을 배치 nx하여 ny프레임.

참고 URL : https://stackoverflow.com/questions/2540129/lattice-multiple-plots-in-one-window

반응형