업데이트 : http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes 의 R 위키에 있던 복사 된 자료 , 이제 링크가 끊어졌습니다. 웨이 백 머신 에서도 사용 가능
동일한 플롯에있는 두 개의 서로 다른 y 축
(원래 Daniel Rajdl의 일부 자료 2006/03/31 15:26)
동일한 플롯에서 두 개의 다른 척도를 사용하는 것이 적절한 상황은 거의 없습니다. 그래픽을 보는 사람을 오도하는 것은 매우 쉽습니다. 이 문제에 대한 다음 두 가지 예와 주석 (예 : 정크 차트의 example1 , example2 )과 Stephen Few의이 기사 (“확실히 이중 스케일 축이있는 그래프는 절대로 결론을 내릴 수는 없습니다. 유용합니다. 다른 더 나은 솔루션에 비추어 볼 때 문제가되는 상황을 생각할 수 없습니다.”) 또한 이 만화의 4 번 항목을 참조하십시오 .
결정된 경우 기본 레시피는 첫 번째 플롯을 생성 par(new=TRUE)
하고 R이 그래픽 장치를 지우지 않도록 설정 하고 두 번째 플롯을 생성 한 다음 axes=FALSE
(설정 xlab
및 ylab
공백으로 ann=FALSE
도 작동해야 함) axis(side=4)
새 축을 추가하는 데 사용 하는 것입니다. 오른쪽에 있고 오른쪽 mtext(...,side=4)
에 축 레이블을 추가합니다. 다음은 약간의 구성 데이터를 사용한 예입니다.
set.seed(101)
x <- 1:10
y <- rnorm(10)
## second data set on a very different scale
z <- runif(10, min=1000, max=10000)
par(mar = c(5, 4, 4, 4) + 0.3) # Leave space for z axis
plot(x, y) # first plot
par(new = TRUE)
plot(x, z, type = "l", axes = FALSE, bty = "n", xlab = "", ylab = "")
axis(side=4, at = pretty(range(z)))
mtext("z", side=4, line=3)
twoord.plot()
에서 plotrix
와 마찬가지로 패키지,이 과정을 자동화 doubleYScale()
에 latticeExtra
패키지로 제공된다.
또 다른 예 (Robert W. Baer의 R 메일 링리스트 게시물에서 발췌) :
## set up some fake test data
time <- seq(0,72,12)
betagal.abs <- c(0.05,0.18,0.25,0.31,0.32,0.34,0.35)
cell.density <- c(0,1000,2000,3000,4000,5000,6000)
## add extra space to right margin of plot within frame
par(mar=c(5, 4, 4, 6) + 0.1)
## Plot first set of data and draw its axis
plot(time, betagal.abs, pch=16, axes=FALSE, ylim=c(0,1), xlab="", ylab="",
type="b",col="black", main="Mike's test data")
axis(2, ylim=c(0,1),col="black",las=1) ## las=1 makes horizontal labels
mtext("Beta Gal Absorbance",side=2,line=2.5)
box()
## Allow a second plot on the same graph
par(new=TRUE)
## Plot the second plot and put axis scale on right
plot(time, cell.density, pch=15, xlab="", ylab="", ylim=c(0,7000),
axes=FALSE, type="b", col="red")
## a little farther out (line=4) to make room for labels
mtext("Cell Density",side=4,col="red",line=4)
axis(4, ylim=c(0,7000), col="red",col.axis="red",las=1)
## Draw the time axis
axis(1,pretty(range(time),10))
mtext("Time (Hours)",side=1,col="black",line=2.5)
## Add Legend
legend("topleft",legend=c("Beta Gal","Cell Density"),
text.col=c("black","red"),pch=c(16,15),col=c("black","red"))
유사한 레시피를 사용하여 막대 그래프, 히스토그램 등 다양한 유형의 플롯을 중첩 할 수 있습니다.