ggplot2简明教程

ggplot2简明教程_第1张图片

ggplot2是功能强大且灵活的R包,由Hadley Wickham实现,能够用以绘制精美的图形。

ggplot2将一张图形分为了3个基本部分:图形(Plot)= 数据(Data)+ 几何对象(Geometry)+ 图形属性(Aesthetics)。可以将其描述为绘图模板,若想生成一张图,只需将以下代码中的尖括号部分替换为数据集、几何对象函数或图像属性映射即可:

ggplot(data = ) +
    (mapping = aes())

3个基本部分与尖括号中的内容对应一一对应:

  • DATA是数据框
  • GEOM_FUNCTION为几何对象函数,用以指明需要绘制的图形(如饼图、条形图、折线图等等)
  • MAPPINGS指明数据框中变量与图形属性如何映射

话不多说,让我们从实例出发!

安装和导入ggplot2包

install.packages("tidyverse")

library(ggplot2)

推荐安装tidyverse,它包含了ggplot2和其他一些十分好用的包。

install.packages("tidyverse")

library(tidyverse)

散点图

首先,我们学习如何绘制散点图。这里我们可以使用ggplot2包中的mpg数据框(导入ggplot2包后即可直接使用),mpg包含了由美国环境保护协会收集的38中车型的观测数据。

ggplot2简明教程_第2张图片

mpg数据框包含11个变量(列),其中:

  • manufacturer表示制造厂商
  • model表示型号
  • displ表示发动机排量
  • year表示制造年份
  • cyl表示气缸数
  • trans表示变速器类型
  • drv表示驱动系统,如前轮驱动(f),后轮驱动®和四轮驱动(4)
  • cty表示每加仑城市英里数
  • hwy表示每加仑高速英里数
  • fl表示燃料类型
  • class标识车辆类型,如双座、suv等

为了探索displ(发动机排量)与hwy(每加仑英里数)之间的关系,我们可以绘制散点图,x轴表示displ,y轴表示hwy。绘制散点图的几何函数为geom_point

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

ggplot2简明教程_第3张图片

散点图按照我们的要求(x轴表示displ,y轴表示hwy)成功绘制。但每个点的颜色是黑色的,并且尺寸太小,可以通过geom_point函数的colorsize对其进行设置:

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), size=4, color="orange")

ggplot2简明教程_第4张图片

对于每个点,如果想在图中标记其cyl(气缸数),可以使用geom_text函数:

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy),color="orange") +
  geom_text(mapping = aes(x = displ, y = hwy, label = cyl))

ggplot2简明教程_第5张图片

可以看到aes(x = displ, y = hwy)这部分在两个几何对象函数都出现了,显得有些冗余。我们可以将其放入ggplot函数中:

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + 
  geom_point(color="orange") +
  geom_text(mapping = aes(label = cyl))

后续的几何对象函数可以图形属性映射“共享”,除非在几何对象函数将其覆盖(类似全局变量与局部变量)。

条形图

接下来,我们来绘制class(车辆类型)的条形图:

ggplot(data = mpg, mapping = aes(x = class)) +
  geom_bar()

ggplot2简明教程_第6张图片

神奇的是,我们只是指明x轴表示class,就成功将条形图绘制出来了。原因是geom_bar函数会用统计变换(statistical transformation,stat)算法计算新数据,过程如下:

ggplot2简明教程_第7张图片

上面代码等同于:

mpg %>% count(class) %>% 
  ggplot(mapping = aes(x = class, y = n)) +
  geom_bar(stat = "identity") + 
  labs(y = "count")

其中,mpg %>% count(class)的结果为:

ggplot2简明教程_第8张图片

我们也可以自行设置条形的宽度、边框颜色、填充颜色等属性:

ggplot(data = mpg, mapping = aes(x = class)) +
  geom_bar(width = 0.5, color = "red", fill = "steelblue")

ggplot2简明教程_第9张图片

给每个条形加上标记:

mpg %>% count(class) %>% 
  ggplot(mapping = aes(x = class, y = n)) +
  geom_bar(stat = "identity", width = 0.5, fill = "steelblue") + 
  geom_text(aes(label = n), size = 3.5, color = "white", vjust=1.6)

ggplot2简明教程_第10张图片

我们可以用fl(燃料类型)变量用以设置填充颜色:

ggplot(data = mpg, mapping = aes(x = class, fill = fl)) +
  geom_bar(width = 0.5) + 
  coord_flip()

ggplot2简明教程_第11张图片

由于x轴上的类别文字可能会重叠在一起,我们使用了coord_flip函数让x轴与y轴进行翻转。如上图所示,默认情况下会创建一个堆叠的条形图。若不想让图形堆叠,我们可以通过geom_bar函数的position参数进行设置:

ggplot(data = mpg, mapping = aes(x = class, fill = fl)) +
  geom_bar(width = 0.5, position = position_dodge()) + 
  coord_flip()

ggplot2简明教程_第12张图片

饼图

我们可以将class所占的比例绘制成饼图。计算class在所有数据中的占比有很多种方法,这里介绍一种:

data <- mpg %>% count(class) %>% 
  arrange(desc(class)) %>%
  mutate(prop = n / sum(n),
         ypos = cumsum(prop)- 0.5*prop)
data

ggplot2简明教程_第13张图片

接下来,按照下面代码绘制饼图:

pie <- data %>%
  ggplot(aes(x = "", y = prop, fill = class)) +
  geom_bar(width = 1, stat = "identity") +
  coord_polar("y", start = 0)
pie

ggplot2简明教程_第14张图片

coord_polar函数将普通的直角坐标系换成了极坐标系。但上图包含了许多没必要的信息,例如:x轴名称,y轴刻度等等。我们可以创建一个主题对图形整体进行设置:

blank_theme <- theme_minimal()+
  theme(
    axis.title.x = element_blank(),
    axis.title.y = element_blank(),
    panel.border = element_blank(),
    panel.grid=element_blank(),
    axis.ticks = element_blank(),
    axis.text.x = element_blank(),
    plot.title=element_text(size=14, face="bold")
  )

pie + blank_theme

ggplot2简明教程_第15张图片

图形现在“整洁”了不少,我们可以给每块区域加上标记,用于指明其具体占比数:

library(scales)
pie + blank_theme +
  geom_text(aes(y = ypos, label = percent(prop)), color = "white", size=3)

ggplot2简明教程_第16张图片

简明参考手册

最后,附上ggplot2的简明参考手册。

感兴趣的同学推荐下载一下哦!

推荐

The R Graph Gallery: https://www.r-graph-gallery.com/

R Graphics Cookbook, 2nd edition: https://r-graphics.org/

ggplot2: Elegant Graphics for Data Analysis: https://ggplot2-book.org/index.html

R for Data Science: https://r4ds.had.co.nz/index.html

Drawing bar plots with percentages instead of counts

参考

http://www.sthda.com/english/wiki/ggplot2-essentials

《ggplot2:数据分析与图形艺术》

《R数据科学》

同载于:https://andyfree96.github.io/2021/05/09/3811884b/

你可能感兴趣的:(数据可视化)