其他
你的 legend 还是画的很丑?
快乐的处暑
plot
函数是不能自动生成图例的,不像 ggplot
那样映射后会自动生成图例,因此我们需要 手动创建注释图例 ,在群里会经常遇到小伙伴们问图例的调整问题 ,这次让大家全面了解下怎样方便的绘制出自己想要的图例形式。
我们使用 legend
函数来给我们的图添加图例。
legend
函数用法及参数说明:
Usage
legend(x, y = NULL, # 图例位置坐标,也可以是字符串:"bottomright", "bottom", "bottomleft", "left", "topleft", "top", "topright", "right" and "center"
legend, # 字符串或表达式
fill = NULL, # 图例填充颜色
col = par("col"), # 点、线等图形的颜色
border = "black", # 图例边框颜色
lty, # 线形
lwd, # 线粗
pch, # 点的形状
angle = 45, # 填充线的角度
density = NULL, # 图例填充线
bty = "o", # 图例边框类型,n表示没有边框
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, # 相对于x位置的对齐方式,0左对齐,0.5居中,1右对齐
yjust = 1, # 相对于y位置的对齐方式,0左对齐,0.5居中,1右对齐
x.intersp = 1, # 图例中文字离图片的水平距离
y.intersp = 1, # 图例中文字离图片的竖直距离
adj = c(0, 0.5), # 图例文字的位置对齐,1或2个向量
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, # TRUE时可以在绘图区外绘制图例,FALSE则只能在绘图里添加图例
title.col = text.col, # 图例标题的颜色
title.adj = 0.5, # 图例标题的对齐方式
seg.len = 2 # 图例线的长度
)
接下来我们实战考察一下参数使用。
1、图例位置
字符串指定:
# 生成数据
x <- runif(100,min = 1,max = 100)
y <- runif(100,min = 1,max = 100)
par(mfrow = c(1,1))
# 绘图
plot(x,y,
type = 'p',pch = 23,bg = 'pink',col = 'red',
cex = 2.5,lwd = 2)
# 添加图例
pos <- c("bottomright", "bottom", "bottomleft", "left",
"topleft", "top", "topright", "right" , "center")
# 绘制图例
lapply(pos, function(x){legend(x,legend = paste('I am ',x,sep = ''),
pch = 23, # 形状
pt.cex = 2, # 图例符号大小
# 填充色和边框颜色
pt.bg = 'pink',col = 'red')})
使用inset
参数微调:
# 微调图例
par(mfrow = c(1,1))
# 绘图
plot(x,y,
type = 'p',pch = 23,bg = 'pink',col = 'red',
cex = 2.5,lwd = 2)
# 没有调整
legend('topright',legend = paste('I am ','topright',sep = ''),
pch = 23, # 形状
pt.cex = 2, # 图例符号大小
# 填充色和边框颜色
pt.bg = 'pink',col = 'red')
# 微调
legend('topright',legend = paste('I am ajusted ','topright',sep = ''),
pch = 23, # 形状
pt.cex = 2, # 图例符号大小
# 填充色和边框颜色
pt.bg = 'pink',col = 'red',
inset = 0.1)
指定坐标位置:
# 指定摆放位置
legend(x = 15,y = 85,
legend = paste('I am xy ',sep = ''),
pch = 23, # 形状
pt.cex = 2, # 图例符号大小
# 填充色和边框颜色
pt.bg = 'pink',col = 'red',
inset = 0.1)
2、添加填充线
density 可以控制填充线密度:
# 添加填充线
par(mfrow = c(1,1))
# 绘图
plot(x,y)
legend('top',legend = 'I am Legend',cex = 2,
density = 20,angle = 30)
legend('center',legend = 'I am Legend',cex = 3,
density = 10,angle = 30)
3、有无边框
# 有无边框
par(mfrow = c(1,1))
# 绘图
plot(x,y,type = 'n')
legend('top',legend = 'I am Legend',cex = 2,bty = 'o')
legend('center',legend = 'I am Legend',cex = 2,bty = 'n')
4、点线合并
# 点线合并
par(mfrow = c(1,1))
# 绘图
plot(1:3,c(1,3,1),type = 'o')
# 合并
legend('topright',legend = 'I am Legend',
title = 'I am title', # 标题
title.col = 'blue',
title.adj = 0, # 标题左对齐
pch = 1,lty = 1, # 点、线
# 合并
merge = T)
# 不合并
legend('right',legend = c('dot','line'),
title = 'I am title', # 标题
title.col = 'red',
title.adj = 0.5, # 标题居中
pch = 1,lty = 1, # 点、线
# 不合并
merge = F)
5、图例列数
使用ncol
参数控制图例列数:
# 图例列数
par(mfrow = c(1,1))
# 绘图
plot(1:3,c(1,3,1),type = 'o')
# 一列
legend('left',legend = LETTERS[1:5],
pch = 1:5,col = rainbow(5))
# 合并
legend('center',legend = LETTERS[1:5],
pch = 1:5,col = rainbow(5),ncol = 3)
6、图例文字调整
# 图例文字调整
par(mfrow = c(1,1))
# 绘图
plot(1:3,c(1,3,1),type = 'n')
# 添加图例
legend('bottomleft',legend = c('one','two','three','four','five'),
pch = 1:5,col = rainbow(5))
legend('bottom',legend = c('one','two','three','four','five'),
pch = 1:5,col = rainbow(5),
# 增大文字与字符距离
x.intersp = 2)
legend('right',legend = c('one','two','three','four','five'),
pch = 1:5,col = rainbow(5),
# 增加竖直间距
y.intersp = 2)
7、图例放到图外
当我们想把图例放到绘图外时,先得把绘图边界加宽,才好放置图例,使用 mar 参数:
# 图例绘制位置
par(mfrow = c(1,1),mar = c(2,2,2,8))
# 绘图
plot(1:3,c(1,3,1),type = 'n')
# 水平放置
legend('center',
legend = c('one','two','three','four','five','six','seven','eight'),
pch = 1:8,col = rainbow(5),cex = 0.5,
# 水平放置
horiz = T)
# 放到绘图区外
legend(x = 3.3,y = 2.5,
legend = c('one','two','three','four','five','six','seven','eight'),
cex = 1,
pch = 1:8,col = rainbow(5),
xpd = T)
剩下的参数大家自行区探索吧。
收官!
代码 我上传到 QQ 群 老俊俊生信交流群
文件夹里。欢迎加入。加我微信我也拉你进 微信群聊 老俊俊生信交流群
哦。
群二维码:
老俊俊微信:
知识星球:
所以今天你学习了吗?
欢迎小伙伴留言评论!
今天的分享就到这里了,敬请期待下一篇!
最后欢迎大家分享转发,您的点赞是对我的鼓励和肯定!
如果觉得对您帮助很大,赏杯快乐水喝喝吧!
推 荐 阅 读