ggplot2-图形语法

ggplot2 图形语法

ggplot2 是一个功能强大且灵活的 R 包,由 Hadley Wickham 编写,它可以生成优雅而实用的图形。ggplot2中 的 gg 表示图形语法(grammar of graphic),这是一个通过使用“语法”来绘图的图形概念。ggplot2 主张模块间的协调与分工,整个 ggplot2 的语法框架,主要包括数据绘图部分与美化部分。ggplot2 图形语法的主要特点如下所示。

  1. 采用图层的设计方式,有利于结构化思维实现数据可视化。有明确的起始与终止,图层之间的叠加是靠“+”实现的,越往后,其图层越在上方。通常一条 geom_xxx()函数或 stat_xxx()函数可以绘制一个图层。

  2. 将表征数据和图形的细节分开,能快速将图形表现出来,使创造性的绘图更加容易实现。而且通过 stat_xxx()函数将常见的统计变换融入绘图中。

  3. 图形美观,扩展包丰富,有专门调整颜色(color),字体(font)和主题(theme)等辅助包。可以帮助用户快速指定个性化的图表。

ggplot2 语法框架

 

ggplot2-图形语法_第1张图片

其中所需的图标输入信息如下所示:

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

  2. geom_xxx() | stat_xxx():几何图层或统计变换,比如常见的 geom_point()(散点图),geom_bat()(柱形图),geom_histogram()(统计直方图),geom_boxplot()(箱型图),geom_line()(折线图)等。我们通常使用 geom_xxx()函数就可以绘制大部分图表。

可选的图表输入信息包括以下 5 个部分,主要是实现图表的美化与变换等。

  1. scale_xxx():度量调整,调整具体的度量,包括颜色(color),大小(size)或形状(shape)等。跟 MAPPINGS的映射变量相对应。

  2. coord_xxx(): 坐标变换,默认笛卡尔坐标系,还包括极坐标系、地理空间坐标系等。

  3. facet_xxx(): 分面系统,将某个变量进行分面变换,包括按行、列和网格等形式分面绘图。

  4. guides(): 图例调整,主要包括连续型和离散型两种类型的图例。

  5. theme(): 主题设定,主要用于调整图表的细节,包括图表背景、网格线的间隔与颜色等。

 

ggplot2-图形语法_第2张图片

一、 geom_xxx()和 stat_xxx()

平时,我们主要使用几何对象函数 geom_xxx(),只有当绘图表设计统计变换时,才会用统计变换函数 stat_xxx(),比如绘制带误差线的均值散点图或者柱形图等。根据函数输入的变量总数与数据类型,大致可以将函数分为三个大类,六个小类。

geom 相关函数

geom_xxx()中,基础的展示元素可以分为四类:点(point),线(line),多边形(polygon)和文本(text)

几何对象函数 描述
geom_abline 线图,由斜率和截距指定
geom_area 面积图(即连续的条形图)
geom_bar 条形图
geom_bin2d 二维封箱的热图
geom_blank 空的几何对象,什么也不画
geom_boxplot 箱线图
geom_contour 等高线图
geom_crossbar crossbar图(类似于箱线图,但没有触须和极值点)
geom_density 密度图
geom_density2d 二维密度图
geom_errorbar 误差线(通常添加到其他图形上,比如柱状图、点图、线图等)
geom_errorbarh 水平误差线
geom_freqpoly 频率多边形(类似于直方图)
geom_hex 六边形图(通常用于六边形封箱)
geom_histogram 直方图
geom_hline 水平线
geom_jitter 点、自动添加了扰动
geom_line 线
geom_linerange 区间,用竖直线来表示
geom_path 几何路径,由一组点按顺序连接
geom_point
geom_pointrange 一条垂直线,线的中间有一个点(与Crossbar图和箱线图相关,可以用来表示线的范围)
geom_polygon 多边形
geom_quantile 一组分位数线(来自分位数回归)
geom_rect 二维的长方形
geom_ribbon 彩虹图(在连续的x值上表示y的范围,例如Tufte著名的拿破仑远征图)
geom_rug 触须
geom_segment 线段
geom_smooth 平滑的条件均值
geom_step 阶梯图
geom_text 文本
geom_tile 瓦片(即一个个的小长方形或多边形)
geom_vline 竖直线

 

stat 转换函数在数据被绘制出来之前对数据进行聚合和其他计算。stat_xxx()确定了数据的计算方法。所以一个 stat()函数必须与一个 geom()函数对应才能进行计算。

我们可以将 geom_xxx()和 stat_xxx()都视作图层。每一个图层都包含一个几何对象和一个统计变换,即每一个以 geom_xxx开头的几何对象都有一个 stat参数,同时每一个 stat_xxx 开头的几何对象也都有一个 geom 参数。

stat 相关函数

统计变换函数 描述
stat_abline 添加线条,用斜率和截距表示
stat_bin 分割数据,然后绘制直方图
stat_bin2d 二维密度图,用矩阵表示
stat_binhex 二维密度图,用六边形表示
stat_boxplot 绘制带触须的箱线图
stat_contour 绘制三维数据的等高线图
stat_density 绘制密度图
stat_density2d 绘制二维密度图
stat_function 添加函数曲线
stat_hline 添加水平线
stat_identity 绘制原始数据,不进行统计变换
stat_qq 绘制Q-Q图
stat_quantile 连续的分位线
stat_smooth 添加平滑曲线
stat_spoke 绘制有方向的数据点(由x和y指定位置,angle指定角度)
stat_sum 绘制不重复的取值之和(通常用在三点图上)
stat_summary 绘制汇总数据
stat_unique 绘制不同的数值,去掉重复的数值
stat_vline 绘制竖直线

 

二、 视觉通道映射

R 语言可用作变量的视觉通道映射参数主要包括 color/col/colour, fill, size, angle, linetype, shape, vjust, hjust。主要说明如下:

  1. color

    指定点,线,和填充区域轮廓的颜色。

  2. fill

    指定填充区域颜色。

  3. alpha

    指定颜色的透明度。0(完全透明)~ 1(不透明)

  4. stroke

    轮廓线条的粗细

  5. size

    指点的尺寸或线的宽度,默认单位是 mm,可以在 geom_point()函数绘制的散点图上,添加 size的映射,从而实现气泡图。

  6. group

    分组映射的变量

  7. fontface

    使用的字形

    变量 字形
    plain 常规体
    bold 粗体
    italic 斜体
    bold.italic 粗斜体

     

  8. family**

    字体内置只有三种:sans, serif, mono,但是可以指定字体(可用 extrafont 扩展包),需要提前设置好字体,然后才可以用family来修改字体。

     

     

     
    windowsFonts(myFont1=windowsFont("Times New Roman"),myFont2=windowsFont("华文行楷"))
    Family="myfont1"

     

  9. angle

    指角度,只有部分几何对象。如geom_text()函数中的文本放置角度,geom_spoke()函数中的短棒的摆放角度。

  10. vjust和 hjust

    是与位置调整有关的视觉通道映射参数。其中,vjust 是指垂直位置微调,在(0, 1)区间的数字或位置字符串。0=“button”, 0.5="middle", 1="top",hjust 是指在水平位置的微调,在(0, 1)区间的数字或位置字符串:0=“left”, 0.5="center", 1="right"。

  11. linetype

    是指线条的类型,包括:

    数字或字符 线型
    0;blank 白线
    1;solid 实线
    2;dashed 短虚线
    3;dotted 点线
    4;dotdash 点横线
    5;longdash 长虚线
    6;twodash 短长虚线
  12. shape

    是指点的形状,为[0, 25]区间的 26 个整数,分别对应:

     

ggplot2-图形语法_第3张图片

常见函数的主要视觉通道

元素 geom_xxx()函数 类别型视觉通道映射 数值型视觉通道映射
geom_point(); geom_jitter(); geom_dotplot() color; fill; shape color; fill; alpha; size
线 geom_line(); geom_path(); geom_curve();geom_density();
geom_linerange(); geom_step();
geom_abline(); geom_hline()等
color;linetype color; size
多边形 geom_polygon(); geom_rect(); geom_bar();
geom_ribbron(); geom_area();
geom_histogram(); geom_violin()等
color; fill color; fill; alpha
文本 geom_label(); geom_text() color color; angle; vjust; hjust

 

三、 度量调整

度量调整用于控制变量映射到视觉对象的具体细节,比如: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()。需要注意的是:scale*manual()表示手动自定义离散的度量,包括 colour, fill, alpha, linetype, shape和 size 等视觉通道映射参数。其他组合如下:

 

视觉对象 变量类型 标度函数 描述及关键参数
连续变量 scale_x_continuous() name(坐标轴名称),
breaks(指定坐标轴刻度位置),
labels(指定坐标轴刻度标签内容),
limits(指定坐标轴显示范围),
expand(扩展坐标轴显示范围),
trans(坐标轴变换函数exp(),log(),log10(), 还支持 scales 包内的其他变换函数,如 scales::precent()),
postion(坐标轴的位置)
    scale_y_continuous() 还有:minor_breaks, sec.axis
    scale_x_log10()/sqrt() 只有trans参数不一样,相当于trans=“log10”/“sqrt”
    scale_x_log10()/sqrt() 只有trans参数不一样,相当于trans=“log10”/“sqrt”
    scale_x_reverse() 翻转x轴,相当于trans=“reverse”,其它参数相同
    scale_y_reverse()  
  离散变量 scale_x_discrete() name,breaks,labels,limits,expand,na.value, position
    scale_y_discrete() 与上面相同
颜色 连续变量 scale_colour_continuous() type=“gradient”, type=“viridis”(色盲渐变)
    scale_fill_continuous()  
  连续色板 scale_colour_distiller() 将离散色板连续化,来自RColorBrewer色板,type,palette, direction
    scale_fill_distiller()  
  连续渐变 scale_colour_gradient() 单极渐变, low,high
    scale_colour_gradient2() 两极渐变, low,mid,hight
    scale_colour_gradientn() 多色渐变,colors,如colours = terrain.colors(10)
    scale_fill_gradient()  
    scale_fill_gradient2()  
    scale_fill_gradientn()  
  离散色板 scale_colour_brewer() type, palette,direction指定标度顺序(1/-1)
    scale_fill_brewer()  
  自定义 scale_colour_manual() values,默认名称属性匹配,否则字母顺序匹配, 因子水平匹配最好
    scale_fill_manual()  
透明度 连续变量 scale_alpha() range,limits, breaks, labels
    scale_alpha_continuous() range,limits, breaks, labels
  离散变量 scale_alpha_discrete() range,limits, breaks, lables
    scale_alpha_ordinal() range,limits, breaks, labels
  自定义 scale_alpha_manual() values
色相 离散变量 scale_colour_hue() h, c, l, h.start, direction
    scale_fill_hue() h, c, l, h.start, direction
灰度 连续渐变 scale_colour_grey() start, end
    scale_fill_grey() start, end
shape 离散变量 scale_shape() name, limits, breaks, labels
  自定义 scale_shape_manual() values
线型 连续变量 scale_linetype_continuous() name, limits, breaks, labels,不常用连续变量
  离散变量 scale_linetype() name, limits, breaks, labels
    scale_linetype_discrete() name, limits, breaks, labels
  自定义 scale_linetype() values
尺寸 数值 scale_radius() 圆半径,name,limits, breaks, labels, range
  数值 scale_size() size面积/线宽,参数与radius相同。不建议size映射离散变量
  数值 scale_size_area() area面积,0映射到零面积,参数与上面相同
  自定义 scale_size_manual() values
时间 时间序列 scale_x_date() 用于时间轴的标度设置,参数包括:name, breaks,labels
    scale_y_date() 和:date_breaks(时间跨度), date_labels,limits, expand,position 等
    scale_x_time() 参数与_date()相同,增加obb参数(out of bounds)处理limits外的数据
    scale_y_time()  
    scale_x_datetime() 参数比xxx_date()增加了:timezone
    scale_y_datetime()  
色盲 离散变量 scale_colour_viridis_d() 色盲友好颜色,使用viridis colormap色板,参数与下面相同
    scale_fill_viridis_d() alpha, begin, end, direction,option,option指定具体的色条
  连续渐变 scale_colour_viridis_c() 参数与上面相同,option: “A”=“magma”, “B”=“inferno”
    scale_fill_viridis_c() option: “C”=“plasma”, “D”=“viridis”(默认), “E”=“cividis”

 

参数解释:

  • type: 在scale_color_continuous中表示指定变化类型,是普通渐变"gradient"还是色盲渐变"viridis" 在scale_xxx_distiller()中表示指定色板类型,是"seq"渐变,"qual"离散对比,还是"div"两极色板 palette 表示指定色条类型,当type色板类型已经指定的情况下,可以用序号指定,若type未指定,则必须用色条名称指定

  • direction: 表示指定标度与变量的匹配方向,direction=-1表示方向翻转 在scale_xxx_hue()中,direction=1表示色轮的顺时针方向,direction=-1表示逆时针方向

  • low, high:表示渐变的颜色两极颜色名称或HEX色值,如果用颜色名称指定,则可用muted("color")指定某个暗色

  • mid :表示指定渐变的中点颜色

  • midpoint: 表示指定渐变的中点对应的变量值

  • colors/colours: 多色渐变中,指定颜色向量, 如colour = terrain.colors(10)取10个地形图颜色作为渐变的基础色

  • values:表示指定自定义颜色向量,如果变量为数字类型,则默认按数字大小顺序与values匹配, 如果变量为字符类型,则默认按变量字母顺序与values匹配, 为了按照想要的顺序匹配,可以给变量增加一个因子水平,然后自动按照因子水平与values匹配(自上而下,由低到高) 也可给values向量设置名称属性,名称与要映射的变量值一样,然后按照名称属性匹配

  • range: 表示指定指定显示的透明度范围,在[0, 1]区间内,0表示不透明,1表示不透明

  • limits: 表示设定显示范围

  • breaks: 表示设定图例刻度位置

  • labels 表示指定图例刻度处显示标签

  • h: 表示指定色相范围,在区间[0, 360]内

  • c: 表示指定chroma(色度,鲜艳或是暗淡)值,最大值取决于hue和luminance

  • l: 表示指定luminance(亮度),在区间[0, 100]内

  • start: 表示指定灰度起点,从0到1,0表示白色,1表示黑色

  • end: 表示灰度结束点,通常end,默认end更黑,若设定start>end,则翻转标度

  • 其它公共参数:name图例名称,palette, breaks, labels, limits, expand, position(标签在图例的上\下\左\右)

 

四、 坐标系

坐标系主要分为直角坐标系(rectangula coordinate)、极坐标系(polar coordinate)和地理坐标系(geographic coordinate)。

需要注意的是:时间坐标轴刻度函数 scale_xxx_date()要求是 Date 格式;scale_xxx_datetime()要求变量是 POSLXct 格式;scale_xxx_time()要求是 hms 格式。

4.1 直角坐标系

直角坐标系,也叫笛卡尔坐标系 ,是最常用的坐标系。直角坐标系包括:

  • coord_cartesian()

    默认的直角坐标系

    参数:

    xlim: x 轴的范围

    ylim: y 轴的范围

    expand: xlim = NULL, ylim = NULL, expand = TRUE

  • coord_fixed()

    固定纵横比的直角坐标系

    参数:

    xlim: x 轴的范围

    ylim: y 轴的范围

    expand: xlim = NULL, ylim = NULL, expand = TRUE

    ratio: ratio=2则图形高和宽的比是2:1,即纵轴的1cm显示出来的长度是横轴的两倍。所以ratio越小,图形越扁

  • coord_flip()

    坐标轴反转,参数与 coord_cartesian一致

  • coord_trans()

    将数据转换为想要的形式,再进行作图,最常见的是取对数。

4.2 极坐标系

我们平时使用的雷达图、饼图等就是极坐标系。极坐标系是指在平面内由极点、极轴和极径。

  • coord_polar()

    将坐标系从直角坐标系转换为极坐标系。

    参数:

    theta: 要极坐标话的中心轴,即 X轴转换为圆周,Y 轴转换为半径。

    start: 表示起始角度。

    direction: 表示排列方向。1表示顺时针,-1表示逆时针。

    clip:

4.3 地理坐标系

可以使用 coord_map()函数和 coord_quickmap()函数设定坐标系为地理空间坐标系。

 

五、 图例

图例作为图表背景信息的重要组成部分,对图表的完整与表达尤为重要。ggplot2 用 guide_colorbar()/guide_colourbar()函数调整连续变量的图例,guide_legend()函数用于离散变量的图例,也可用于连续变量。

guides()函数将 guide_colorbar 和 guide_legend 两种图例嵌套进去,方便映射与处理。如 guides(fill = guide_colorbar()),对多个图例共同处理的时候尤为有效。另外,也可以在 scale_xxx()度量中指定 guide 类型,guide="colorbar"或 guide="legend"。

5.1 常用公共参数

ggplot2-图形语法_第4张图片

 

5.2 guide_colorbar()

 

ggplot2-图形语法_第5张图片

5.3 guide_legend()

 

ggplot2-图形语法_第6张图片六、 主题系统

主题系统包括绘图区背景、网格线、坐标轴线条灯图表细节部分。主要对象包括文本(text)、矩形(rect)和线条(line)三大类,对应函数包括element_text()、element_rect()、element_line(),另外 element_back()表示设置为无。具体如下:

对象 函数 图像对整体 绘图区(面板) 坐标轴 图例 分面系统
text element_text()
参数:
family,
face,
colour,
size,
hjust,
vjust,
angle,
lineheight
plot.title
plot.subtitle
plot.caption
  axis.title
axis.title.x
axis.title.y
axis.text
axis.text.x
axis.text.y
legend.text
legend.text.align
legend.text.title
legend.text.align
strip.text
strip.text.x
strip.text.y
tect element_rect()
参数:
colour,
size,
type
plot.background
plot.spacing
plot.margin
panel.background
panel.border
panel.spacing
  legend.background
legend.margin
legend.spacing
legend.spacing.x
legend.spacing.y
strip.background
line element_line()
参数:
fill,
colour,
size,
type
  panel.grid.major
panel.grid.minor
panel.grid.major.x
panel.grid.major.y
panel.grid.minor.x
panel.grid.minor.y
axis.line
axis.line.x
axis.line.y
axis.ticks
axis.ticks.x
axis.ticks.y
axis.ticks.length
axis.ticks.margin
   

 

七、 位置调整

在 geom_xxx()函数中,参数 position 表示绘图数据系列的位置调整,默认为“identity”。具体参数如下

函数 功能 参数说明
position_dodge() 水平并排放置 width; preserve
position_identity() 位置不变  
position_stack() 垂直堆叠 vjust; revers
position_fill() 百分比填充 vjust; revers
position_jitter() 扰动处理 width; height
position_jitterdodge() 并排抖动 width; jitter.height; dodge.width
position_nudge() 整体位置微调 x; y

八、 色彩搭配

离散型颜色主题方案

颜色度量语句 说明
p + scale_fill_brewer(palette="Set1") Library(RColorBrewer)
p + scale_fill_viridis(option = "plasma", discrete = TRUE) Library(viridis)
p + scale_fill_manual(values=wes_palette("Darjeeling1")[c(1,3,5)]) Library(wesanderson)
p + scale_fill_manual(values = c("#E7298A", "#66A61E", "#E6AB02"))  

连续型颜色主题方案

颜色度量语句 说明
p + scale_fill_distiller(palette = "RdYIBu") Library(RColorBrewer)
p + scale_fill_virdis(option = "viridis", descrete = FALSE) Library(viridis)
p + scale_fill_gradien2(low = "#00A08A", mid = "white", high="#FF0000", midpoint = mean(df$age)) 自定义连续的颜色条,mean(df$age)表示 age 均值对应中间色 white
p + scale_fill_gradientn(colors = terrain.colors(10)) R 语言预色调色板 terrain.colors()

RColorBerwer 调色代码(也可通过display.brewer.all()显示)

 

ggplot2-图形语法_第7张图片

你可能感兴趣的:(R,ggplot2,R,ggplot2)