cập nhật : Tài liệu được sao chép trên R wiki tại http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , liên kết hiện đã bị hỏng: cũng có sẵn từ máy quay lui
Hai trục y khác nhau trên cùng một âm mưu
(một số tài liệu nguyên bản của Daniel Rajdl 2006/03/31 15:26)
Xin lưu ý rằng có rất ít trường hợp thích hợp sử dụng hai thang đo khác nhau trên cùng một cốt truyện. Nó rất dễ gây hiểu lầm cho người xem hình ảnh. Kiểm tra hai ví dụ sau và nhận xét về vấn đề này (ví dụ1 , ví dụ2 từ Biểu đồ rác ), cũng như bài viết này của Stephen Vài (kết luận "Tôi chắc chắn không thể kết luận, một lần và mãi mãi, rằng đồ thị có trục tỷ lệ kép không bao giờ hữu ích; chỉ là tôi không thể nghĩ ra một tình huống đảm bảo cho họ dựa trên các giải pháp khác tốt hơn. ”) Cũng xem điểm # 4 trong phim hoạt hình này ...
Nếu bạn quyết tâm, công thức cơ bản là tạo cốt truyện đầu tiên của bạn, đặt par(new=TRUE)
để ngăn R xóa thiết bị đồ họa, tạo cốt truyện thứ hai với axes=FALSE
(và đặt xlab
và ylab
để trống - ann=FALSE
cũng nên hoạt động) và sau đó sử dụng axis(side=4)
để thêm một trục mới ở phía bên phải và mtext(...,side=4)
để thêm nhãn trục ở phía bên phải. Dưới đây là một ví dụ sử dụng một chút dữ liệu được tạo sẵn:
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()
trong plotrix
gói tự động hóa quá trình này, cũng như doubleYScale()
trong latticeExtra
gói.
Một ví dụ khác (phỏng theo bài đăng trong danh sách gửi thư R của 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"))
Các công thức tương tự có thể được sử dụng để chồng các ô thuộc nhiều loại khác nhau - ô thanh, biểu đồ, v.v.