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语法架构
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
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语言数据可视化之美-专业突变绘制指南(增强版),张杰