评论

收藏

[R语言] R语言(ggplot2绘图)

编程语言 编程语言 发布于:2021-07-13 20:28 | 阅读数:317 | 评论:0

  原文链接:https://wklchris.github.io/R-ggplot2.html
  
  ggplot2 的语法与 R 原生的语法并不统一,但是熟悉起来也并不复杂。它主要通过“+”连接多个绘图函数,同时允许将绘图结果赋值给其他对象,因此使用起来更加灵活。
  ggplot2 最为人称道的一点是美观性;部分用户学习 R 甚至仅仅为了用 ggplot2 画出更好看的图像。
  注:ggplot2 官方的函数索引教程在 http://docs.ggplot2.org/current/。本文的部分例子取自官方索引。
library(ggplot2)

基础
  加载了 ggplot2 包后,里面自带了一个 mpg 数据集,共 234 条观测,是有关车辆燃料的。11 个变量如下:

  •   制造商:manufacturer
  •   模具型号:model
  •   排放量:displ (engine displacement, in litres)
  •   年份:year
  •   发动机数量:cyl (number of cylinders)
  •   变速器形式:trans (type of transmission)
  •   驱动形式:drv (f = front-wheel drive, r = rear wheel drive, 4 = 4wd)
  •   每加仑城市行驶距离:cty (city miles per gallon)
  •   每加仑公路行驶距离:hwy (highway miles per gallon)
  •   燃料:fl (e: ethenol E85, d: diesel, r: regular, p: premium, c: CNG)
  •   车辆类型:class
  这里将主要利用这个数据集进行绘图。
mpg$drv <- as.factor(mpg$drv)mpg$fl <- as.factor(mpg$fl)mpg$class <- as.factor(mpg$class)str(mpg)
Classes 'tbl_df', 'tbl' and 'data.frame':234 obs. of  11 variables:
 $ manufacturer: chr  "audi" "audi" "audi" "audi" ...
 $ model     : chr  "a4" "a4" "a4" "a4" ...
 $ displ     : num  1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
 $ year    : int  1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
 $ cyl     : int  4 4 4 4 6 6 6 4 4 4 ...
 $ trans     : chr  "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
 $ drv     : Factor w/ 3 levels "4","f","r": 2 2 2 2 2 2 2 1 1 1 ...
 $ cty     : int  18 21 20 21 16 18 18 18 16 20 ...
 $ hwy     : int  29 29 31 30 26 26 27 26 25 28 ...
 $ fl      : Factor w/ 5 levels "c","d","e","p",..: 4 4 4 4 4 4 4 4 4 4 ...
 $ class     : Factor w/ 7 levels "2seater","compact",..: 2 2 2 2 2 2 2 2 2 2 ...
  先来看一个简单的例子:
g1 <- ggplot(mpg, aes(x=class))
  上面这个例子不会输出任何结果。函数 ggplot() 的作用仅仅是指定一些全图适用的参数,比如绘图使用的数据集、x/y 轴将使用的列(上面用 aes 参数指定了)、分组、颜色等等。ggplot2 绘图分为几个类似图层的概念:

  •   setup: 指定初始化参数,一般是 ggplot() 函数。
  •   geometries:图形层。即绘图的主题,一般是以 geom_ 开头的命令,比如 geom_bar()。
  •   labels:标签层,图像的 x/y 轴刻度,以及轴标题、图像总标题。
  •   themes:主题层。包括图像的图例、字体、配色等等。
  •   faceting:图形的分组控制命令。
  图像必须有图形层才能显示主体,例如:
g1 + geom_bar()  # 注意到赋值的对象直接可以使用在“+”运算中
DSC0000.jpg

  或许对于 ggplot() 函数与其 aes 参数还有诸多不解之处,在下面将逐渐提到。我们常用的 aes 参数有:

  •   x= / y= :这是基本参数。
  •   fill= / color= :一般指定一个因子,让 ggplot2 自动根据因子的水平数分配颜色并绘图。
  •   shape= :类似上,不过是自动分配点样式。

绘图命令
  条形图:geom_bar()
  上面给出了很简单的一个条形图的例子,下面展示更多的用法:
纵轴数值:aes(stat=)
  默认纵轴是 x 轴上各离散类的计数(Count),对应的默认参数是 geom_bar(stat="count")。如果想用其他值代替,需要在 ggplot() 中指定 aes(y=) 参数,并且在条形图函数中改动为 geom_bar(stat="identity")。
# 以各类内部的排放量作为对应的 y 值,进行累加ggplot(mpg, aes(x=class, y=displ)) +
  geom_bar(stat="identity")
DSC0001.jpg

  权重:aes(weight=)
  下面的语句完成了同样的任务,只不过权重相当于使用了乘法。
# 权重。计算每个 class 内的排放总量ggplot(mpg, aes(class)) +
  geom_bar(aes(weight=displ))
DSC0002.jpg

  填充:aes(fill=)
# 每个 class 下,按照 drv 的水平(三个)分别计数ggplot(mpg, aes(class)) +
  geom_bar(aes(fill=drv))
DSC0003.jpg

  并列 / 等高:geom_bar(position=)
  默认的参数是 position=stack:
ggplot(mpg, aes(class)) +
  geom_bar(aes(fill=drv), position="dodge")
DSC0004.jpg
ggplot(mpg, aes(class)) +
  geom_bar(aes(fill=drv), position="fill")
DSC0005.jpg

  箱形图:geom_boxplot()
ggplot(mpg, aes(class, hwy)) + 
  geom_boxplot(varwidth = TRUE)
DSC0006.jpg

  箱形图主题用 fill 参数指定填充颜色,color 参数指定边框颜色。
  对于箱形图外侧的异常点,可以用 outlier 开头的参数进行控制。以下是它们的默认值:

  •   outlier.shape = 19 点样式
  •   outlier.size = 1.5 点大小
  •   outlier.stroke = 0.5 边线宽
  •   outlier.color = NULL 边线颜色
  •   outlier.fill 填充颜色(需要点样式支持)
ggplot(mpg, aes(class, hwy)) + 
  geom_boxplot(fill = "white", color = "darkgreen", 
         outlier.shape=21, outlier.size=4, outlier.stroke = 1,
         outlier.color = "blue", outlier.fill = "orange")
DSC0007.jpg
# 并列箱形图的画法。注意只有 subcompact 类型的车辆有三种 drv 数据ggplot(mpg, aes(class, hwy)) + 
  geom_boxplot(aes(color = drv), fill="white")
DSC0008.jpg

散点图:geom_point()
  最简单的一类图像。
# 根据驱动方式,填充不同颜色;根据发动机数量,选择不同点大小。# 在数据量大或有重复点时,更改 alpha 值是不错的选择ggplot(mpg, aes(cty, hwy)) +
  geom_point(aes(color = drv, size=cyl), shape=19, alpha=0.5)
DSC0009.jpg

  折线图:geom_line()
dt <- data.frame(Data = 1:40, 
         x.value = rep(paste("X", 11:30, sep=""), 2),
         categ = c(rep("Categ 1", 20), rep("Categ 2", 20)))# 若不指定 group,无法用离散数据作为 x 轴来正确作图# 有时候可以通过 group=1 来强制连接所有的点成线ggplot(dt, aes(x=x.value, y=Data, group=categ, color=categ)) +
  geom_line()
DSC00010.jpg

  直方图:geom_histogram()
  参数 bins 指定组的个数, binwidth 则指定每个组的宽度。
ggplot(mpg, aes(cty, fill=drv)) + 
  geom_histogram(bins=20)
DSC00011.jpg
ggplot(mpg, aes(cty, fill=drv)) + 
  geom_histogram(binwidth=2.5)
DSC00012.jpg

矩形图:geom_rect() / geom_tile()
  两者功能相同,但参数有区别。前者指定 xmin/xmax/ymin/ymax 四个角点,后者指定矩形中心坐标 x,y 以及矩形的宽与高 width/height。
dt <- data.frame(x=1:5, y=(6:10)/10, w=rep(2, 5), h=rep(0.08, 5), z=factor(c(1,1,2,3,2)))ggplot(dt, aes(x, y)) +
  geom_tile(aes(fill=z))
DSC00013.jpg
ggplot(dt, aes(x, y, width = w, height = h)) +
  geom_tile(aes(fill=z))
DSC00014.jpg
# 改用 geom_rect 绘制ggplot(dt, aes(xmin = x - w / 2, xmax = x + w / 2, ymin = y - h / 2, ymax = y + h / 2, width = w, height = h)) +
  geom_rect()
DSC00015.jpg


坐标轴与图例命令
  
主题命令:theme()
  部分功能也可以由 guide() 命令代完成。

其他
  坐标轴翻转:coord_flip()
DSC00016.jpg

  猜你可能喜欢
  

  
关注下面的标签,发现更多相似文章