R for data science chap21——使用ggplot2进行图形化沟通

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"
    )
  )
image.png

使用图形标题的目的是概括主要成果尽量不要使用只对图形进行描述的标题

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"
  )
image.png

(这里",”使用的位置和书上不一样,我也不知道为啥,反正能跑就行(●'◡'●)

坐标轴和图例的标题

> 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"
+   )
image.png

用数学公式替代文本

  • 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))
  )
image.png

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)
image.png

标签和点彼此重叠,解决方案:换用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
+   )
image.png

左上角有两个标签完全重叠,可以使用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
+   )
image.png
> 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")
image.png
> 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")
image.png

(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"
+   )
image.png

用+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"
+   )
image.png

文本换行

  • 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

你可能感兴趣的:(R for data science chap21——使用ggplot2进行图形化沟通)