今天总结一下R语言底层作图的图例设置,主要是legend函数的用法。
legend(x, y = NULL, legend, fill = NULL, col = par("col"),
border = "black", lty, lwd, pch,
angle = 45, density = NULL, bty = "o", bg = par("bg"),
box.lwd = par("lwd"), box.lty = par("lty"), box.col = par("fg"),
pt.bg = NA, cex = 1, pt.cex = cex, pt.lwd = lwd,
xjust = 0, yjust = 1, x.intersp = 1, y.intersp = 1,
adj = c(0, 0.5), text.width = NULL, text.col = par("col"),
text.font = NULL, merge = do.lines && has.pch, trace = FALSE,
plot = TRUE, ncol = 1, horiz = FALSE, title = NULL,
inset = 0, xpd, title.col = text.col, title.adj = 0.5,
seg.len = 2)
参数比较多,不过可以大体上分为以下几种功能:
(1)位置坐标参数:
x和y代表图例位置的横纵坐标,除了输入精确的xy坐标,只在x参数中输入"left"、"right"、"top"、"bottom"、"topleft"、" topright"、"bottomleft"、" bottomright"八个单词,可以实现图例在图形左、右、上、下、左上、右上、左下、右下的快速布局。
(2)文本参数:
legend表示每一条图例的文字说明;text.font表示字体,即粗体、斜体;title表示图例整体的标题,text.width是文本的宽度。
(3)颜色参数:
col是点或线的颜色,fill是方块的填充颜色,text.col是图例文字的颜色,title.col是标题的颜色,bg是图例的背景色,pt.bg是点的填充色。
(4)形状参数
lty表示线的类型,pch表示点的类型,angle表示阴影线角度,density表示阴影线密度。
(5)大小参数
cex是整体的大小,pt.cex是点的大小,pt.lwd是点的轮廓线粗细,lwd表示线的粗细,seg.len表示线的长短。
(6)边框参数
bty是边框的类型,只提供2种类型,"o"是有边框,"n"是无边框;x.intersp是边框的宽度, y.intersp是边框的高度。
(7)位置微调参数
xjust和yjust是图例实际位置相对输入的xy坐标点的位置。X和y是图例中心的位置,当xjust = 0.5时,表明图例中心恰好在x点,如果xjust = 0,则表示图例中心位于x点偏左0.5处,如果xjust = 1,则表示图例中心位于x点偏右0.5处;yjust是对垂直位置的微调,用法相同;adj是对文本水平位置的微调,用法相同。
(8)其他
merge如果为True,表示当有点和线同时出现是,点和线在图形上合并展示,即点画在线上。
ncol是图例的列数,可以理解成每行写几个,默认为1。
horiz控制图例横排还是竖排,不是文字横着写还是竖着写,而是当图例有多个时是排成一行还是排成一列。
举几个例子
x <- seq(-2, 2, 0.1)
y1 <- x^2
y2 <- x^3
par(mfrow = c(2, 2), mar = c(4, 4, 1, 1))
## 图例放在上边,有边框
plot(x, y1, type = 'l', col= 'coral', ann = F)
legend(x = 'top',
legend = expression(y == x^2),
lty = 1,
col = 'coral')
## 图例放在左边,有边框
plot(x, y1, type = 'l', col= 'coral', ann = F)
legend(x = 'left',
legend = expression(y == x^2),
lty = 1,
col = 'coral')
## 图例放在左上,无边框
plot(1, 1, xlim = c(-2, 2), ylim = c(-8, 8), type = 'n', ann = F, las = 1)
lines(x, y1, lty = 1, col = 'coral')
lines(x, y2, lty = 1, col = 'skyblue')
legend(x = 'topleft',
legend = c(expression(y == x^2), expression(y == x^3)),
lty = 1,
col = c('coral', 'skyblue'),
bty = 'n')
## 图例放在右上,无边框
plot(1, 1, xlim = c(-2, 2), ylim = c(-8, 8), type = 'n', ann = F, las = 1)
lines(x, y1, lty = 1, col = 'coral')
lines(x, y2, lty = 1, col = 'skyblue')
legend(x = 'topright',
legend = c(expression(y == x^2), expression(y == x^3)),
lty = 1,
col = c('coral', 'skyblue'),
bty = 'n',
horiz = T)
可以看到有边框时,图例的整个区域覆盖住了底层图形,无边框时没有覆盖底层图形,只是图例的文字印在了底层图形上。