pembaruan : Materi yang disalin di wiki R di http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , tautan sekarang rusak: juga tersedia dari mesin wayback
Dua sumbu y berbeda di plot yang sama
(beberapa materi aslinya oleh Daniel Rajdl 2006/03/31 15:26)
Harap dicatat bahwa ada sangat sedikit situasi di mana penggunaan dua skala yang berbeda pada plot yang sama dapat dilakukan. Sangat mudah untuk menyesatkan pemirsa grafik. Periksa berikut dua contoh dan komentar tentang masalah ini ( example1 , example2 dari Charts Sampah ), serta artikel ini dengan Stephen Sedikit (yang menyimpulkan “Saya tentu tidak bisa menyimpulkan, sekali dan untuk semua, yang grafik dengan sumbu dual-skala tidak pernah berguna; hanya saja saya tidak dapat memikirkan situasi yang menjamin mereka sehubungan dengan solusi lain yang lebih baik. ”) Juga lihat poin # 4 dalam kartun ini ...
Jika Anda ditentukan, resep dasarnya adalah membuat plot pertama Anda, mengatur par(new=TRUE)
untuk mencegah R dari membersihkan perangkat grafis, membuat plot kedua dengan axes=FALSE
(dan pengaturan xlab
dan ylab
menjadi kosong - ann=FALSE
juga harus berfungsi) dan kemudian menggunakan axis(side=4)
untuk menambahkan sumbu baru di sisi kanan, dan mtext(...,side=4)
untuk menambahkan label sumbu di sisi kanan. Berikut ini contoh penggunaan sedikit data yang dibuat-buat:
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()
dalam plotrix
paket mengotomatiskan proses ini, seperti halnya doubleYScale()
dalam latticeExtra
paket.
Contoh lain (diadaptasi dari pos milis R oleh Robert W. Baer):
## 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"))
Resep serupa dapat digunakan untuk menempatkan plot dari berbagai jenis - plot batang, histogram, dll.