อัปเดต : คัดลอกเนื้อหาที่อยู่ใน R wiki ที่http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxesลิงก์เสียแล้ว: มีให้จากเครื่อง wayback ด้วย
แกน 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
แพ็คเกจ
อีกตัวอย่างหนึ่ง (ดัดแปลงมาจากโพสต์รายชื่ออีเมล R โดย 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"))
สูตรอาหารที่คล้ายกันสามารถใช้เพื่อวางซ้อนพล็อตประเภทต่างๆได้เช่นพล็อตแท่งฮิสโตแกรม ฯลฯ