library(tidyverse)
21.2标签
1、labs()
ggplot(mpg,aes(displ,hwy))+
geom_point(aes(color=class))+
geom_smooth(se=F)+
labs(
title = paste(
"Fuel efficiency generally decreases with",
"engine size"
)
)
使用图形标题的目的是概括主要成果,尽量不要使用只对图形进行描述的标题
2、subtitle——在标题以下用更小的字体添加更多附加信息
3、caption——可以在图形右下角添加文本,常用于描述数据来源
ggplot(mpg,aes(displ,hwy))+
geom_point(aes(color=class))+
geom_smooth(se=F)+
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"
)
(这里",”使用的位置和书上不一样,我也不知道为啥,反正能跑就行(●'◡'●)
坐标轴和图例的标题
> ggplot(mpg,aes(displ,hwy))+
+ geom_point(aes(color=class))+
+ geom_smooth(se=F)+
+ labs(
+ x = "Engine displacement (L)",
+ y = "Highway fuel economy(mpg)",
+ color = "Car Type"
+ )
用数学公式替代文本
- quote() ← ""
- ?plotmath()查看可用选项
df <- tibble(
x= runif(10),
y= runif(10)
)
ggplot(df,aes(x,y))+
geom_point()+
labs(
x=quote(sum(x[i]^2,i=1,n)),
y=quote(alpha+beta +frac(delta,theta))
)
21.3 注释
- 选取每类汽车中效率最高的型号,然后再图形中标记出来
> best_in_class <- 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 = best_in_class)
标签和点彼此重叠,解决方案:换用geom_label(0
使用geom_label()函数
> ggplot(mpg,aes(displ,hwy))+
+ geom_point(aes(color=class))+
+ geom_label(
+ aes(label=model),
+ data = best_in_class,
+ nudge_y = 2,
+ alpha=1/2
+ )
左上角有两个标签完全重叠,可以使用ggrepel包
使用ggrepel包——可以自动调整标签位置避免重叠
> library(ggrepel)
> library(ggrepel)
> ggplot(mpg,aes(displ,hwy))+
+ geom_point(aes(color=class))+
+ #添加图层标识best
+ geom_point(size=3,shape=1,data = best_in_class)+
+ geom_label_repel(
+ aes(label=model),
+ data = best_in_class
+ )
> class_avg <- mpg %>%
+ group_by(class) %>%
+ summarise(
+ displ=median(displ),
+ hwy = median(hwy)
+ )
`summarise()` ungrouping output (override with `.groups` argument)
> class_avg
# A tibble: 7 x 3
class displ hwy
1 2seater 6.2 25
2 compact 2.2 27
3 midsize 2.8 27
4 minivan 3.3 23
5 pickup 4.7 17
6 subcompact 2.2 26
7 suv 4.65 17.5
> ggplot(mpg,aes(displ,hwy,color=class))+
+ geom_label_repel(aes(label=class),
+ data = class_avg,
+ size=2,
+ label.size = 1,
+ segment.color = NA)+
+ geom_point()+
+ theme(legend.position = "none")
> ggplot(mpg,aes(displ,hwy,color=class))+
+ geom_label_repel(aes(label=class),
+ data = class_avg,
+ size=6,
+ label.size = NA,
+ fill= NA,
+ segment.color = NA)+
+ geom_point()+
+ theme(legend.position = "none")
(lll¬ω¬)书上的代码再次无用……将label.size设为0并没有什么用,设为NA可,此时底色为白色;将fill设为NA,则无填充色
添加唯一的标签将其放在图片的角落
summarize()函数计算处x和y的最大值
> label <- mpg %>%
+ summarise(
+ displ= max(displ),
+ hwy =max(hwy),
+ label="Increasing engine size is \nrelated to decreasing fuel economy"
+ )
> ggplot(mpg,aes(displ,hwy))+
+ geom_point()+
+ geom_text(
+ aes(label=label),
+ data = label,
+ vjust= "top",
+ hjust="right"
+ )
用+Inf/-Inf使标签紧贴图形边界而无须从数据集计算位置
l> label <- tibble(
+ displ= Inf,
+ hwy = Inf,
+ label=paste("Increasing engine size is \nrelated to",
+ "decreasing fuel economy"
+ ))
> label
# A tibble: 1 x 3
displ hwy label
1 Inf Inf "Increasing engine size is \nrelated to decreasing fuel economy"
> label <- tibble(
+ displ= Inf,
+ hwy = Inf,
+ label=paste("Increasing engine size is \nrelated to",
+ "decreasing fuel economy"
+ ))
>
>
> ggplot(mpg,aes(displ,hwy))+
+ geom_point()+
+ geom_text(
+ aes(label=label),
+ data = label,
+ vjust= "top",
+ hjust="right"
+ )
文本换行
- stringr::str_wrap()
> "Increasing engine size is related to decreasing fuel economy." %>%
+ stringr::str_wrap(width = 40) %>%
+ writeLines()
Increasing engine size is related to
decreasing fuel economy.
- \n
> "Increasing engine size is \nrelated to decreasing fuel economy." %>%
+ writeLines()
Increasing engine size is
related to decreasing fuel economy.
标签的对齐方式
- hjust="left"/"center"/"right"
- vjust="top"/"center"/"bottom"
其他注释
注释形状 | 函数 | 参数 |
---|---|---|
水平参考线 | geom_hline() | size=2/ color="white" |
垂直参考线 | geom_vline() | size=2/ color="white" |
矩形 | geom_rect() | xmin\xmax\ymin\ymax |
箭头 | geom_segment() | arrow\x\y\xend\yend |