• ggplot2 提取stat计算出来的数据


    使用ggplot2 绘图时,我们只需要提供原始数据就可以了,ggplot2 内置了许多的计算函数,来帮助我们计算对应的数值。

    最典型的的,当使用geom_boxplot 绘制箱线图时,我们只提供原始数据,用来绘图的最大值,最小值,中位数,上下四分位数都由ggplot2 自动计算。

    那么我们如何提取这部分计算好的数据呢,以箱线图为例进行说明

    绘图代码如下:

    pdf("a.pdf")
    p      <- ggplot(mpg, aes(class, hwy)) + geom_boxplot()
    temp <- print(p)
    dev.off()

    生成的图片如下:

    在temp 这个对象中,就保存了计算好的用于绘制箱线图的数据

    让我们来看下temp这个对象的结构

    >str(temp)
    List of 3
     $ data  :List of 1
      ..$ :'data.frame':	7 obs. of  22 variables:
      .. ..$ ymin      : num [1:7] 23 23 23 21 15 20 14
      .. ..$ lower     : num [1:7] 24 26 26 22 16 24.5 17
      .. ..$ middle    : num [1:7] 25 27 27 23 17 26 17.5
      .. ..$ upper     : num [1:7] 26 29 29 24 18 30.5 19
      .. ..$ ymax      : num [1:7] 26 33 32 24 20 36 22
      .. ..$ outliers  :List of 7
      .. .. ..$ : num(0) 
      .. .. ..$ : num [1:4] 35 37 35 44
      .. .. ..$ : num(0) 
      .. .. ..$ : num 17
      .. .. ..$ : num [1:4] 12 12 12 22
      .. .. ..$ : num [1:2] 44 41
      .. .. ..$ : num [1:8] 12 12 25 24 27 25 26 23
      .. ..$ notchupper: num [1:7] 26.4 27.7 27.7 24 17.6 ...
      .. ..$ notchlower: num [1:7] 23.6 26.3 26.3 22 16.4 ...
      .. ..$ x         : num [1:7] 1 2 3 4 5 6 7
      .. ..$ PANEL     : int [1:7] 1 1 1 1 1 1 1
      .. ..$ group     : int [1:7] 1 2 3 4 5 6 7
      .. ..$ ymin_final: num [1:7] 23 23 23 17 12 20 12
      .. ..$ ymax_final: num [1:7] 26 44 32 24 22 44 27
      .. ..$ xmin      : num [1:7] 0.625 1.625 2.625 3.625 4.625 ...
      .. ..$ xmax      : num [1:7] 1.38 2.38 3.38 4.38 5.38 ...
      .. ..$ weight    : num [1:7] 1 1 1 1 1 1 1
      .. ..$ colour    : chr [1:7] "grey20" "grey20" "grey20" "grey20" ...
      .. ..$ fill      : chr [1:7] "white" "white" "white" "white" ...
      .. ..$ size      : num [1:7] 0.5 0.5 0.5 0.5 0.5 0.5 0.5
      .. ..$ alpha     : logi [1:7] NA NA NA NA NA NA ...
      .. ..$ shape     : num [1:7] 19 19 19 19 19 19 19
      .. ..$ linetype  : chr [1:7] "solid" "solid" "solid" "solid" ...
     $ layout:Classes 'Layout', 'ggproto' <ggproto object: Class Layout>
        facet: <ggproto object: Class FacetNull, Facet>
            compute_layout: function
            draw_back: function
            draw_front: function
            draw_labels: function
            draw_panels: function
            finish_data: function
            init_scales: function
            map: function
            map_data: function
            params: list
            render_back: function
            render_front: function
            render_panels: function
            setup_data: function
            setup_params: function
            shrink: TRUE
            train: function
            train_positions: function
            train_scales: function
            vars: function
            super:  <ggproto object: Class FacetNull, Facet>
        finish_data: function
        get_scales: function
        map: function
        map_position: function
        panel_layout: data.frame
        panel_ranges: list
        panel_scales: list
        render: function
        render_labels: function
        reset_scales: function
        setup: function
        train_position: function
        train_ranges: function
        xlabel: function
        ylabel: function
        super:  <ggproto object: Class Layout> 
     $ plot  :List of 9
      ..$ data       :Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	234 obs. of  11 variables:
      .. ..$ manufacturer: chr [1:234] "audi" "audi" "audi" "audi" ...
      .. ..$ model       : chr [1:234] "a4" "a4" "a4" "a4" ...
      .. ..$ displ       : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
      .. ..$ year        : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
      .. ..$ cyl         : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
      .. ..$ trans       : chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
      .. ..$ drv         : chr [1:234] "f" "f" "f" "f" ...
      .. ..$ cty         : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
      .. ..$ hwy         : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
      .. ..$ fl          : chr [1:234] "p" "p" "p" "p" ...
      .. ..$ class       : chr [1:234] "compact" "compact" "compact" "compact" ...
      ..$ layers     :List of 1
      .. ..$ :Classes 'LayerInstance', 'Layer', 'ggproto' <ggproto object: Class LayerInstance, Layer>
        aes_params: list
        compute_aesthetics: function
        compute_geom_1: function
        compute_geom_2: function
        compute_position: function
        compute_statistic: function
        data: waiver
        draw_geom: function
        finish_statistics: function
        geom: <ggproto object: Class GeomBoxplot, Geom>
            aesthetics: function
            default_aes: uneval
            draw_group: function
            draw_key: function
            draw_layer: function
            draw_panel: function
            extra_params: na.rm
            handle_na: function
            non_missing_aes: 
            optional_aes: 
            parameters: function
            required_aes: x lower upper middle ymin ymax
            setup_data: function
            use_defaults: function
            super:  <ggproto object: Class Geom>
        geom_params: list
        inherit.aes: TRUE
        layer_data: function
        mapping: NULL
        map_statistic: function
        position: <ggproto object: Class PositionDodge, Position>
            compute_layer: function
            compute_panel: function
            required_aes: x
            setup_data: function
            setup_params: function
             NULL
            super:  <ggproto object: Class Position>
        print: function
        show.legend: NA
        stat: <ggproto object: Class StatBoxplot, Stat>
            aesthetics: function
            compute_group: function
            compute_layer: function
            compute_panel: function
            default_aes: uneval
            extra_params: na.rm
            finish_layer: function
            non_missing_aes: weight
            parameters: function
            required_aes: x y
            retransform: TRUE
            setup_data: function
            setup_params: function
            super:  <ggproto object: Class Stat>
        stat_params: list
        subset: NULL
        super:  <ggproto object: Class Layer> 
      ..$ scales     :Classes 'ScalesList', 'ggproto' <ggproto object: Class ScalesList>
        add: function
        clone: function
        find: function
        get_scales: function
        has_scale: function
        input: function
        n: function
        non_position_scales: function
        scales: list
        super:  <ggproto object: Class ScalesList> 
      ..$ mapping    :List of 2
      .. ..$ x: symbol class
      .. ..$ y: symbol hwy
      ..$ theme      : list()
      ..$ coordinates:Classes 'CoordCartesian', 'Coord', 'ggproto' <ggproto object: Class CoordCartesian, Coord>
        aspect: function
        distance: function
        expand: TRUE
        is_linear: function
        labels: function
        limits: list
        range: function
        render_axis_h: function
        render_axis_v: function
        render_bg: function
        render_fg: function
        train: function
        transform: function
        super:  <ggproto object: Class CoordCartesian, Coord> 
      ..$ facet      :Classes 'FacetNull', 'Facet', 'ggproto' <ggproto object: Class FacetNull, Facet>
        compute_layout: function
        draw_back: function
        draw_front: function
        draw_labels: function
        draw_panels: function
        finish_data: function
        init_scales: function
        map: function
        map_data: function
        params: list
        render_back: function
        render_front: function
        render_panels: function
        setup_data: function
        setup_params: function
        shrink: TRUE
        train: function
        train_positions: function
        train_scales: function
        vars: function
        super:  <ggproto object: Class FacetNull, Facet> 
      ..$ plot_env   :<environment: R_GlobalEnv> 
      ..$ labels     :List of 2
      .. ..$ x: chr "class"
      .. ..$ y: chr "hwy"
      ..- attr(*, "class")= chr [1:2] "gg" "ggplot"

     从运行结果可以看到,temp这个对象由3个元素构成的列表,第一个元素data 代表绘图用的数据,第二个元素layout 代表了页面的布局,第三个元素plot 代表了图片中的各种属性

    其中data 就是我们想要的那部分数据

    > temp$data[[1]]
      ymin lower middle upper ymax                       outliers notchupper
    1   23  24.0   25.0  26.0   26                                  26.41319
    2   23  26.0   27.0  29.0   33                 35, 37, 35, 44   27.69140
    3   23  26.0   27.0  29.0   32                                  27.74026
    4   21  22.0   23.0  24.0   24                             17   23.95278
    5   15  16.0   17.0  18.0   20                 12, 12, 12, 22   17.55009
    6   20  24.5   26.0  30.5   36                         44, 41   27.60241
    7   14  17.0   17.5  19.0   22 12, 12, 25, 24, 27, 25, 26, 23   17.90132
      notchlower x PANEL group ymin_final ymax_final  xmin  xmax weight colour
    1   23.58681 1     1     1         23         26 0.625 1.375      1 grey20
    2   26.30860 2     1     2         23         44 1.625 2.375      1 grey20
    3   26.25974 3     1     3         23         32 2.625 3.375      1 grey20
    4   22.04722 4     1     4         17         24 3.625 4.375      1 grey20
    5   16.44991 5     1     5         12         22 4.625 5.375      1 grey20
    6   24.39759 6     1     6         20         44 5.625 6.375      1 grey20
    7   17.09868 7     1     7         12         27 6.625 7.375      1 grey20
       fill size alpha shape linetype
    1 white  0.5    NA    19    solid
    2 white  0.5    NA    19    solid
    3 white  0.5    NA    19    solid
    4 white  0.5    NA    19    solid
    5 white  0.5    NA    19    solid
    6 white  0.5    NA    19    solid
    7 white  0.5    NA    19    solid

    temp$data 是一个只有一个元素的列表,这个元素是一个数据框,记录了每个箱体的具体数据,共有7行,对应图片中的7个箱子,数据框的每列给出了对应的ymin, lower, middle, upper, ymax 等值。

    对于每一种geom图层,都可以采用上面的方式来提取中间数据。

  • 相关阅读:
    Hbase基础(十二):Kylin可视化
    Hbase基础(十一):Kylin快速入门
    Hbase基础(十):Kylin环境搭建
    Hbase基础(九):Kylin 概述
    Hbase基础(八):Sqoop 一些常用命令及参数
    Hbase基础(七):Sqoop 的简单使用案例
    Hbase基础(六):Sqoop 简介与原理、安装
    HBASE进阶(5):整合Phoenix
    frrouting mpls sr
    tcpdump mpls 多个mpls label
  • 原文地址:https://www.cnblogs.com/xudongliang/p/7404507.html
Copyright © 2020-2023  润新知