标签
要想将探索性图形转换为解释性图形,最容易的办法就是加上一些标签。可以使用labs()
函数来添加标签,以下示例为图形添加了一个标题:
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_smooth(se=FALSE)+labs(title = paste('Fuel efficiency generally decreases with','engine size'))
要想添加更多的文本,可以使用另外两个实用的标签
- subtitle可以在标题下以更小的字体添加更多的附加信息。
- caption可以在图形右下角添加文本,常用于描述数据来源:
ggplot(mpg, aes(displ, hwy)) +geom_point(aes(color = class)) +geom_smooth(se = FALSE) +labs(title = paste("Fuel efficiency generally decreases with","engine size"), subtitle = paste("Two seaters (sports cars) are an exception","because of their light weight"), caption = "Data from fueleconomy.gov")
我们还可以使用
labs()
函数替换坐标轴和图例中的标题
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_smooth(se=FALSE)+labs(x = "Engine displacement (L)", y = "Highway fuel economy (mpg)",colour = "Car type")
还可以使用数学公式代替字符串文本,用
quote()
代替"",再使用?plotmath
命令可查看可用选项:
ggplot(df,aes(x,y))+geom_point()+labs(x=quote(sum(x[i]^2,i==1,n)),y=quote(alpha+beta+frac(delta,theta)))
注释
有时我们需要对特定的观测添加标签,此时可以使用geom_text()
函数。用dplyr筛选出mpg数据集每类汽车中效率最高的型号并作注释:
library(dplyr)
data <- mpg %>% group_by(class) %>% filter(row_number(desc(hwy))==1)
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_text(aes(label=model),data=data)
为了解决标签之间重叠的问题,可以使用
geom_label()
函数,它可以为文本加上文本框,并且通过调节nudge_y参数,可以让标签位于数据点正上方:
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_label(aes(label=model),data=data,nudge_y = 2,alpha=0.5)
这样的效果好一些,但如果仔细查看左上角,就会发现2个标签几乎完全重叠。此时可以借助ggrepel包来调整标签的位置,避免重叠:
library(ggrepel)
ggplot(mpg,aes(displ,hwy))+geom_point(aes(color=class))+geom_point(data=data,size=3,shape=1)+geom_label_repel(aes(label=model),data=data)
有时可以直接将标签放在图形上填充不同的颜色,以代替图例:
class_avg <- mpg %>% group_by(class) %>% summarise(displ=median(displ),hwy=median(hwy))
ggplot(mpg,aes(displ,hwy,color=class))+geom_label_repel(aes(label=class),data=class_avg,size=6,label.size = 0,segment.colour = NA)+geom_point()+theme(legend.position = 'none')