อีกวิธีหนึ่งที่นอกเหนือจาก ondes ที่กล่าวถึงแล้ว (การใช้layout
หรือpar(xpd=TRUE)
) คือการวางโครงเรื่องของคุณด้วยพล็อตที่โปร่งใสบนอุปกรณ์ทั้งหมดแล้วเพิ่มคำอธิบายประกอบลงในนั้น
เคล็ดลับคือการซ้อนกราฟ (ว่าง) บนพื้นที่การวางแผนที่สมบูรณ์และเพิ่มคำอธิบายลงในนั้น เราสามารถใช้par(fig=...)
ตัวเลือก ก่อนอื่นเราแนะนำให้ R สร้างพล็อตใหม่ผ่านอุปกรณ์การลงจุดทั้งหมด:
par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0), mar=c(0, 0, 0, 0), new=TRUE)
การตั้งค่าoma
และmar
จำเป็นเนื่องจากเราต้องการให้การตกแต่งภายในของพล็อตครอบคลุมอุปกรณ์ทั้งหมด new=TRUE
จำเป็นเพื่อป้องกัน R ไม่ให้เริ่มอุปกรณ์ใหม่ จากนั้นเราสามารถเพิ่มพล็อตที่ว่างเปล่า:
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
และเราพร้อมที่จะเพิ่มตำนาน:
legend("bottomright", ...)
จะเพิ่มคำอธิบายประกอบที่ด้านล่างขวาของอุปกรณ์ ในทำนองเดียวกันเราสามารถเพิ่มคำอธิบายแผนภูมิลงบนระยะขอบด้านบนหรือด้านขวา สิ่งเดียวที่เราต้องมั่นใจคือขอบของพล็อตดั้งเดิมนั้นใหญ่พอที่จะรองรับตำนาน
การนำทั้งหมดนี้ไปใช้ในฟังก์ชั่น
add_legend <- function(...) {
opar <- par(fig=c(0, 1, 0, 1), oma=c(0, 0, 0, 0),
mar=c(0, 0, 0, 0), new=TRUE)
on.exit(par(opar))
plot(0, 0, type='n', bty='n', xaxt='n', yaxt='n')
legend(...)
}
และเป็นตัวอย่าง ขั้นแรกสร้างพล็อตเพื่อให้แน่ใจว่าเรามีพื้นที่ว่างด้านล่างเพื่อเพิ่มคำอธิบาย:
par(mar = c(5, 4, 1.4, 0.2))
plot(rnorm(50), rnorm(50), col=c("steelblue", "indianred"), pch=20)
จากนั้นเพิ่มคำอธิบาย
add_legend("topright", legend=c("Foo", "Bar"), pch=20,
col=c("steelblue", "indianred"),
horiz=TRUE, bty='n', cex=0.8)
ที่เกิดขึ้นใน: