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
        width: 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图层,都可以采用上面的方式来提取中间数据。

时间: 2024-10-12 13:31:20

ggplot2 提取stat计算出来的数据的相关文章

压缩跟踪(CT)代码详细学习_模块2(特征的提取和计算)

0.下载安装Opencv,当前版本为249. 1.下载Python,当前OPencv版本为249,不过其支持的最新版本的Python为2.7,所以可以下载276版本. 2.下载numpy,开始我使用了1.6,没有通过,错误如图.下载了最新的1.8.1版本. 3.将Opencv安装目录下opencv\build\python\2.7\x86中的cv2.pyd复制到python安装目录Lib\site-packages下. 4.找到opencv源文件内的draw.py运行. 压缩跟踪(CT)代码详细

计算float类型数据

1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 float k,p; 8 9 k = 1.0/172.0; 10 p = 1/172; 11 12 cout<<"k = "<<k<<endl; 13 cout<<"p = "<<p<<endl; 14 15 } 计算float类型数据时,计算式里的数

城市计算,大数据的用武之地!

上图:反映北京出租车轨迹数据分布的热度图,微软亚洲研究院供图 近年来,城市计算(Urban Computing)逐渐走入公众视野,并且越来越受到社会关注.这是一个以计算机科学为基础.涉及了多项其他技术的新兴交叉领域,其中以智能交通这项典型应用最广为人知.事实上,城市计算的相关技术还可以应用到城市规划.环境污染监测.车辆能源消耗.城市安全和紧急事件响应等方面.美国<麻省理工技术评论>杂志(MIT Technology Review,简称TR)本年度的"TR35"评选也对城市计

vue2.0 之计算属性和数据监听

计算属性computed <template> <div> <input type="text" name="" v-model="myVal"><br/> {{ myValueWithoutNum }}<br/> {{ getMyValueWithoutNum() }}<br/> </div> </template> <script> e

jplayer中动态添加列表曲目(js提取request中的list数据作为js参数使用)

jplayer 的播放列表使用如下: 1 $(document).ready(function(){ 2 3 new jPlayerPlaylist({ 4 jPlayer: "#jquery_jplayer_1", 5 cssSelectorAncestor: "#jp_container_1" 6 }, [ 7 { 8 title:"Cro Magnon Man", 9 mp3:"http://www.jplayer.org/aud

Delphi 提取TXT中的Email 数据

仅作记录,方便复用.适合以下格式的类型处理 " aaaa [email protected] sfsfs afalfjaf [email protected] afaf 阿发 " 一行一个 email 有明显的分割符号.一行多个email 还要改一下. program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, windows, perlregex; var txt,savetxt:TextFile; st

数据解析:从某种格式的数据中提取自己所需的数据

主流格式:XML 和 JSON XML分为两种:SAX解析和DOM解析 XML解析工具:NSXMLParser.GDataXMLNode等 JSON解析工具:JSONKit.NSJSONSerialization

提取json对象中的数据,转化为数组

var xx1 = ["乐谱中的调号为( )调", "写出a自然小调音阶.", "以G为冠音,构写增四.减五音程.", "调式分析.", "将下列乐谱移为C大调.", "正确组合以下乐谱.", "以下乐谱应如何正确组合( )"]; var xx2 = {"0分":{"乐谱中的调号为( )调":"2",&quo

hive,把一个表中计算好的数据,存到另一个外部表中

直接上代码: 第一部分: case class OrdPacsresult_obj(pk_dcpv: String, result_obj: String) 第二部分: def ordsubj: Unit = { import sparkSession.implicits._ import sparkSession.sql val dataset: Dataset[OrdPacsresult_subj] = sql("select pk_dcpv,result_obj,result_subj f