代码之家  ›  专栏  ›  技术社区  ›  Adam Hoelscher

在ggplot2的组级别应用函数

  •  3
  • Adam Hoelscher  · 技术社区  · 7 年前

    ggplot2 ,为了在 x y 一个美学的概念在分裂 data (例如使用 group color

    长版本

    我在想办法 ggplot

    假设我们有一个人口,所有人都有一个隐藏的值。这些隐藏值的秩(因此CDF)是公开的。

    my_data <- data.table(class = sort(rep(x = c('a','b','c'), times = 3)))
    
    hidden <- c(10, 15,  80,
                 0, 50, 100,
                 5, 90,  95)
    
    my_data[, rank := ecdf(hidden)(hidden)]
    

    我可以使用总体CDF来推断类内的CDF。然后,我想将每个类的CDF与总体CDF进行对比,这有助于查看隐藏值在类之间的分布是否一致。

    我最好的尝试

    经过几次迭代后,我很惊讶这不起作用。我认为,通过设置在最高层次的审美群体,功能将以同样的方式应用的统计数据。相反, ecdf(rank)(rank) 再次应用于整个列,这将导致 等于 .

    ggplot(data = my_data, mapping = aes(color = class)) +
      geom_line(mapping = aes(
        x = rank,
        y = ecdf(rank)(rank)
      ))
    

    lines all on top of each other

    下面是一个在 颜色 .

    ggplot(data = data, mapping = aes(color = class)) +
      geom_density(mapping = aes(
        x = rank,
        y = ..scaled..
      ))
    

    enter image description here

    我最好的解决方法

    by data.table ),我可以在我的数据中添加一个额外的列来实现这一点。

    data[, class_rank := ecdf(value)(value), class]
    ggplot(data = data, mapping = aes(color = class)) +
      geom_line(mapping = aes(
        x = rank,
        y = class_rank
      ))
    

    individual CDFs

    GG2地块 已经做了很多很棒的东西,我觉得这是在那里,我只是找不到它。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Pedro J. Aphalo    7 年前
    1. 美学被映射到 data . 分组依据 绘制其他美学在这一点上没有效果。
    2. 应用函数的统计数据的好例子有 stat_summary() stat_smooth()

    因此,我认为在“ggplot2”中实现你的要求的唯一方法是使用一种尚不存在的美学。定义一个新的统计数据来总结 x 审美群体与审美文化 y

    library(ggplot2)
    library(dplyr)
    
    my_data <- data.frame(class = sort(rep(x = c('a','b','c'), times = 3)),
                          hidden = c(10, 15,  80, 0, 50, 100, 5, 90,  95))
    
    my_data %>%
      mutate(rank = ecdf(hidden)(hidden)) %>%
      group_by(class) %>%
      mutate(class_rank = ecdf(hidden)(hidden)) %>%
      ggplot(aes(rank, class_rank, color = class)) +
        geom_line()
    
    推荐文章