ggplot2 001 图形语法

ggplot2是R语言最流行的第三方扩展包,包名中“gg”是图形语法(grammar of graphics)的简称,Wickham Hadley将这套语法诠释如下:
一张统计图形就是从数据到几何对象(geometric object,缩写geom)的图形属性(aesthetic attribute,缩写aes)的一个映射。此外,图形中还可能包含数据的统计变换(statistical transformation,缩写stats),最后绘制在某个特定的坐标系(coordinate system,缩写coord)中,而分面(facet)则可以用来生成数据不同子集的图形。

1.ggplot2绘图语言组件:

  • 1.1 data:数据
  • 1.2 mapping:一系列数据中的变量对应到图形属性的映射aes()
  • 1.3 layer:图层,由几何元素及统计变换组成
    -1.3.1 geom:几何对象,也即在图中实际看到的元素
    -1.3.2 stats:统计变换,对数据进行的某种汇总
  • 1.5 scale:标度,将数据的取值映射到图形空间,如颜色,大小,形状等表示不同的取值,展现标度的常见做法是绘制图例和坐标轴
  • 1.6 facet:分面,描述如何将数据分解为各个子集,以及如何对子集作图并联合进行展示
  • 1.7 coord:坐标系,描述了数据如何映射到图形所在的平面,同时提供了看图所需的坐标轴以及网格线
  • 1.8 theme:主题,控制各点的精细显示,如字体大小及背景颜色

2.ggplot语法

2.1 ggplot语法架构

ggplot2 001 图形语法_第1张图片
ggplot语法框架

2.2 绘图语法构成

ggplot(data = NULL, mapping = aes()) +            # 基础图层,不出现图形元素    
geom_XXX() +                                      # 几何图层                                
stat_XXX() +                                      # 统计变换                                
scale_XXX() +                                     # 度量调整,调整具体的标度                                         
coord_XXX() +                                     # 坐标变换,默认为笛卡尔坐标系
facet_XXX() +                                     # 分面系统,将某个变量进行分面变换
guides() +                                        # 图例调整
theme()                                           # 主题设定
2.2.1 ggplot()

ggplot()是底层绘图函数,其中data为主要是数据框(data.frame)格式的数据集;MAPPING 变量的视觉通道映射,用来表示变量 x 和 y,还可以用来控制颜色(color),大小(size)或形状(shape)等视觉通道;STAT 表示统计变换,与 stat_xxx()相对应,默认为“identity”(无数据变换);POSITION 表示绘图数据系列的位置调整,默认为“identity”(无位置调整)。

2.2.2 geom_xxx(),stat_xxx()

通常情况下,绘图使用几何对象函数 geom_xxx(),只有当绘图表涉及统计变换时,才会用统计变换函数 stat_xxx(),比如绘制带误差线的均值散点图或者柱形图等。根据函数输入的变量总数与数据类型,大致可以将函数分为三个大类,六个小类。
https://mubu.com/doc/1Oz9rtR8kne

ggplot2 001 图形语法_第2张图片
geom & stat
2.2.3 aes() 视觉通道映射

视觉映射参数需要个性化映射时(也即一一对应),此时参数应写在aes()内部,而如果是需要统一设定某些图表元素对象时,应将参数写在aes()外部

  • color
    指定点,线,和填充区域轮廓的颜色。
  • fill
    指定填充区域颜色。
  • alpha
    指定颜色的透明度。0(完全透明)~ 1(不透明)
  • stroke
    轮廓线条的粗细
  • size
    指点的尺寸或线的宽度,默认单位是 mm,可以在 geom_point()函数绘制的散点图上,添加 size的映射,从而实现气泡图。
  • group
    分组映射的变量
  • fontface
    使用的字形,plain=常规体,bold=粗体,italic=斜体,bold.italic=粗斜体
  • family
    字体内置只有三种:sans, serif, mono,但是可以指定字体(可用 extrafont 扩展包),需要提前设置好字体,然后才可以用family来修改字体。
  • angle
    指角度,只有部分几何对象。如geom_text()函数中的文本放置角度,geom_spoke()函数中的短棒的摆放角度。
  • vjust和 hjust
    是与位置调整有关的视觉通道映射参数。其中,vjust 是指垂直位置微调,在(0, 1)区间的数字或位置字符串。0=“button”, 0.5="middle", 1="top",hjust 是指在水平位置的微调,在(0, 1)区间的数字或位置字符串:0=“left”, 0.5="center", 1="right"。
  • linetype
    是指线条的类型(数字或字符线型)。白线(0="blank"),实线(1="solid"),短虚线(2="dashed"),点线(3="dotted"),点横线(4="dotdash"),长虚线(5="longdash"),短长虚线(6="twodash")
  • shape
    点的形状,为[0, 25]区间的 26 个整数
2.2.4 scale_X_XX() 度量调整

度量调整用于控制变量映射到视觉对象的具体细节,比如:x轴和 y 轴、透明度、轮廓颜色、填充色、线形状、形状等,它们都有对应的度量函数。根据视觉通道映射的变量属性,可以将度量函数分成数值型和类别型变量两大类​
ggplot2 的默认度量为scale_xxx_identity():scale_color_identity(), scale_fill_identity(), scale_shape_identity(), scale_linetype_identity(), scale_alpha_identity(), scale_size_identity(), scale_discrete_identity(), scale_continuous_identity()

  • x,y轴
    连续变量:scale_x_continuous(),scale_y_continuous(),scale_x_log10()/sqrt(),scale_x_log10()/sqrt(),scale_x_reverse() ,scale_y_reverse()
    离散变量:scale_x/y_discrete()
  • colour,fill 轮廓及填充色
    连续变量:scale_colour/fill_continuous(),scale_colour/fill_distiller(),scale_colour/fill_gradient(),scale_colour/fill_gradient2(),scale_colour/fill_gradientn()
    离散变量:scale_colour/fill_discrete(),scale_colour/fill_brewer(),scale_colour/fill_manual()
  • alpha 透明度
    连续变量:scale_alpha_continuous()
    离散变量:scale_alpha_discrete(),scale_alpha_manual()
  • shape 性状
    离散变量:scale_shape(),scale_shape_manual()
  • size 大小
    连续变量:scale_size(),scale_size_area()
    离散变量:scale_size_manual()
2.2.5 coordinate 坐标系
  • 直角坐标系(rectangula coordinate)
    coord_cartesian():默认的直角坐标系
    coord_fixed():固定纵横比的直角坐标系
    coord_flip():坐标轴反转,参数与 coord_cartesian一致
    coord_trans():将数据转换为想要的形式,再进行作图,最常见的是取对数
  • 极坐标系(polar coordinate):
    coord_polar():将坐标系从直角坐标系转换为极坐标系。
  • 地理坐标系(geographic coordinate)
    coord_map()函数
    coord_quickmap()函数
2.2.6 guide 图例

调整连续变量的图例:guide_colorbar()/guide_colourbar(),guide_legend()
调整离散变量的图例:guide_legend()
也可以在 scale_xxx()度量中指定 guide 类型,guide="colorbar"或 guide="legend"

2.2.7 theme 主题系统

主题系统包括绘图区背景、网格线、坐标轴线条灯图表细节部分
文本(text):element_text()
矩形(rect):element_rect()
线条(line):element_line()
element_back:表示设置为无

2.2.8 位置调整
  • 在 geom_xxx()函数中,参数 position 表示绘图数据系列的位置调整,默认为“identity”
  • position参数:position_dodge(),水平并排放置 ;position_identity(),位置不变;position_stack(),垂直堆叠;position_fill(),百分比填充;position_jitter(),扰动处理;position_jitterdodge(),并排抖动 ;position_nudge(),整体位置微调
2.2.9 色彩搭配
  • RColorBerwer 调色代码:通过display.brewer.all()显示
  • 离散型颜色主题:
# Library(RColorBrewer)
p + scale_fill_brewer(palette="Set1")
# Library(viridis)
p + scale_fill_viridis(option = "plasma", discrete = TRUE)
# Library(wesanderson)
p + scale_fill_manual(values=wes_palette("Darjeeling1")[c(1,3,5)]),
p + scale_fill_manual(values = c("#E7298A", "#66A61E", "#E6AB02"))
  • 连续型颜色主题:
# Library(RColorBrewer)
p + scale_fill_distiller(palette = "RdYIBu")
# Library(viridis)
p + scale_fill_virdis(option = "viridis", descrete = FALSE)
# 自定义连续的颜色条,mean(df$age)表示 age 均值对应中间色 white
p + scale_fill_gradien2(low = "#00A08A", mid = "white", high="#FF0000", midpoint = mean(df$age))
# R 语言预色调色板 terrain.colors()
p + scale_fill_gradientn(colors = terrain.colors(10))

Reference

R语言数据可视化之美-专业突变绘制指南(增强版),张杰

你可能感兴趣的:(ggplot2 001 图形语法)