zoukankan      html  css  js  c++  java
  • ggplot2(3) 语法突破

    3.1 简介

     图形图层语法基于Wilkinson的图形语法,并在其基础上添加了许多新功能,使得图形更有表现力,并能完美地嵌入到R的环境中。

    图形图层语法使得图形的重复更新变得简单——每次只更新一个特征。该语法的价值还在于它从更高的视角审视了图形的构成,它认为图形的每个组件都是可以修改的。因此,这就给了我们一个作图的基本结构框架,使得图形的绘制更为容易。对于特殊的问题,我们还可以利用它很方便地定义新图形。

    3.2 耗油量数据

    > head(mpg)
    # A tibble: 6 x 11
      manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class  
      <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>  
    1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compact
    2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compact
    3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compact
    4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compact
    5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compact
    6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compact

    该数据集包含美国环保署提供的燃油经济性数据集。它包含1999年至2008年间发布的车型。

    • manufacturer,model:型号名称
    • displ:发动机排量,升
    • year:制造年份
    • cyl:气缸数
    • trans:传动类型
    • drv:f =前轮驱动,r =后轮驱动,4 =四轮驱动
    • cty:每加仑城市行驶英里数
    • hwy:每加仑公路里程
    • fl:燃油类型
    • class:车辆类型

    3.3 绘制散点图

    qplot(displ, hwy, data = mpg, colour = factor(cyl))

    通过发动机排量(以升为单位 displ)对高速公路耗油量(英里每加仑hwy)根据汽缸数目着色的散点图。可以发现影响燃油经济性最重要的因素:发动机排量大小。

    图形属性和数据的映射

    每个点不仅有横坐标和纵坐标,还有大小、颜色和形状,这些属性我们称之为图形属性。每个图形属性都可以映射为一个变量或者设定为一个常数。上图中displ控制点的水平位置,hwy控制点的竖直位置,cyl控制点的颜色,而点的形状和大小都没有指定映射的变量,使用的是默认值(常数)。

    点、线和条都是几何对象的具体表现形式,决定了图形的类型,只含一种几何对象的图通常有特定的名字:

    散点图——点,气泡图——点,条形图——条形,箱线图——箱子,折线图——线。

    标度变换

    把数据单位(升、英里加仑数和气缸数)转换成电脑可以识别的物理单位(如像素和颜色),这个过程称为标度转换。

    颜色的标度变换就是将数据的值映射到三维的颜色空间中,当变量是离散型时,默认将它的值等距的 映射到色轮上。

    3.4 更复杂的图形示例

    qplot(displ, hwy, data = mpg, facets = . ~ year) + geom_smooth()

    分面板形成了一个二维网格,图层在第三维方向上叠加。

    平滑曲线层和散点层的不同之处在于它没有展现原始数据,而是展示了统计变换后的数据。平滑曲线层拟合了一条穿过数据中间位置的平滑曲线。添加该图层需要将数据映射到图形属性后,对其进行统计变换。在上图中,统计变换首先用一条loess平滑曲线来拟合数据,然后再数据的范围内,利用等间隔的点,计算并返回点所对应的预测值。其他有用的统计变换包括一维和二维的封箱、求组平均、分位数回归和等高线。

    ggplot2的绘图过程:将变量映射到图形属性→对数据进行分面处理→标度变换→计算图形属性→标度训练→标度映射→渲染几何对象。

    3.5 图层语法的组件

    图层语法所定义的图由以下几部分组成:

    1. 一个默认的数据集和一组从变量到图形属性的映射;
    2. 一个或多个图层,每个都由一种几何对象、一种统计变换和一种位置调整组成;
    3. 标度,每个图形属性映射都对应一个标度;
    4. 一个坐标系统;
    5. 分面设定。

    3.5.1 图层

    图层的作用是生成在图像上可以被人感知的对象。一个图层由4部分组成:

    1. 数据和图形属性映射;
    2. 一种统计变换;
    3. 一种及几何对象;
    4. 一种位置调整方式。

    3.5.2 标度

    标度控制数据到图形的映射,并且图形上所用的每一个图形属性都对应着一个标度。每个标度都作用于图形中的所有数据,以确保从数据到图形属性映射的一致性。

    一个标度就是一个含有一组参数的函数,它的逆也是如此。例如颜色梯度,把一条实线的各部分映射成一条含不同颜色的路径,函数中的参数可以规定该路径是直线还是曲线,决定选择哪种颜色空间(LUV还是RGB),起始和终止位置的颜色。

    其逆函数被用来绘制参照对象,通过参照对象才能读出图里隐含的信息。参照对象可以是坐标轴或者是图例。大多数的映射都由唯一的逆函数(一一映射),但有些不是。逆映射的唯一性使得复原数据成为可能,但当我们只关注某个方面时,我们不是很在意它是不是唯一映射。

    从左到右:连续型变量映射到大小和颜色,离散型变量映射到形状和颜色。

    3.5.3 坐标系

    坐标系可将对象的位置映射到图形平面上,笛卡尔坐标系是最常用的二维坐标系,极坐标系和各种地图投影则用得相对少一些。

    3.5.4 分面

    分面是条件绘图和网络绘图的一般形式,通过它可以方便地展示数据的不同子集。特别是当验证在不同条件下模型是否保持一致时,分面绘图是一个强大的工具。

    3.6 数据结构

    ggplot2的图形语法通过一种非常简单直接的方式编码到R的数据结构中。一个图形对象就是一个包含数据、映射、图层、标度、坐标和分面的列表,图形对象中还有一个目前我们还未讨论的组件:options。

    当我们得到一个图形对象时,可以对他进行如下处理:

    • 用print()函数将其呈现到屏幕上。在交互式操作时print()会自动地被调用,但是在循环或函数里,我们需要手动输入print();
    • 用ggsave()函数将其保存到磁盘;
    • 用summary()查看它的结构;
    • 用save()函数将它的缓存副本保存到磁盘,这样可以保存一个图形对象的完整副本,使用load()函数可以重现该图。

    例如:

    p <- qplot(displ, hwy, data = mpg, colour = factor(cyl))
    print(p)
    summary(p)
    # 保存图形对象
    save(p, file = "plot.rdata")
    # 读入图形对象
    load("plot.rdata")
    # 将图片保存成png格式
    ggsave("plot.png", width = 5, height = 5) 

    data: manufacturer, model, displ, year, cyl, trans, drv, cty,
    hwy, fl, class [234x11]
    mapping: x = ~displ, y = ~hwy, colour = ~factor(cyl)
    faceting: <ggproto object: Class FacetNull, Facet, gg>
    compute_layout: function
    draw_back: function
    draw_front: function
    draw_labels: function
    draw_panels: function
    finish_data: function
    init_scales: function
    map_data: function
    params: list
    setup_data: function
    setup_params: function
    shrink: TRUE
    train_scales: function
    vars: function
    super: <ggproto object: Class FacetNull, Facet, gg>
    -----------------------------------
    geom_point: na.rm = FALSE
    stat_identity: na.rm = FALSE
    position_identity

    总结

  • 相关阅读:
    随笔1
    随笔
    shared_ptr<> reset
    c++模板库(简介)
    rockmongo用法
    随笔
    TEXT宏,TCHAR类型
    sprintf
    基于SOA的银行系统架构
    大纲6 信息化规划与管理
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/12342561.html
Copyright © 2011-2022 走看看