【问题标题】:stat_qq removes values when setting groupstat_qq 在设置组时删除值
【发布时间】:2014-02-05 08:28:43
【问题描述】:

我正在尝试在ggplot2 中制作一个 QQ 图,其中一些选定的点应该具有不同的形状。但是当我将形状映射到美学中的变量时,stat_qq 包含此变量以拆分数据(涉及 2x3 因素)。

这是一个可重现的例子:

library(ggplot2)
set.seed(331)

df <- do.call(rbind, replicate(10, {expand.grid(method=factor(letters[1:3]), model=factor(LETTERS[1:2]))}, simplify=FALSE ))
df$x <- runif(nrow(df))
df$y <- rnorm(nrow(df), sd=0.2) + 1*as.integer(df$method)
df$top <- FALSE
df <- df[order(df$y, decreasing=TRUE),]
df$top[which(df$method=='a')[1:10]] <- TRUE

到目前为止,我已经成功制作了一个简单的QQ图:

ggplot(df, aes(sample=y, colour=method)) + stat_qq() + facet_grid(.~model)

这基本上是我想要的,除了一个充满方法“a”中的点的手,其形状不同,如变量“top”所示。 从代码中,我们知道这些对应于每个模型中方法“a”中的前 5 个值;即每个刻面最左边的五个红点应该有不同的形状。 在这里,我尝试将其添加为美学:

ggplot(df, aes(sample=y, colour=method, shape=top)) + stat_qq() + facet_grid(.~model)

现在,很明显,stat_qq 已包含变量“top”来拆分数据集,因为前 5 个数据点与非顶部点平行绘制。 这不符合预期。

如何指导stat_qq 对数据进行分组? 我可以试试集体审美:

ggplot(df, aes(sample=y, colour=method, shape=top, group=method)) + stat_qq() + facet_grid(.~model)
Warning messages:
1: Removed 10 rows containing missing values (geom_point). 
2: Removed 10 rows containing missing values (geom_point). 

但由于某种原因,这会完全删除连接到模型的所有数据点。

任何想法如何克服这个问题?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    由于您想违反 ggplot2 的基本概念之一,因此在 ggplot 之外进行计算会更容易:

    library(plyr)
    df <- ddply(df, .(model, method), 
                transform, theo=qqnorm(y, plot.it=FALSE)[["x"]])
    
    ggplot(df, aes(x=theo, y=y, colour=method, shape=top)) + 
        geom_point() + facet_grid(.~model)
    

    【讨论】:

    • 这违反了ggplot2的基本概念吗?
    • 哦,我想纪念你优雅的解决方案和plyr的好例子。
    • colourfillshape 将数据分组,stats 应用于每个组。
    • 嗯,这有点正确,但我不同意我的设置违反了 ggplot2 的概念。然而,美学colourfillshape 是我们在情节上所感知的,stats 默认应用于这些群体的互动。但是,如果需要,我们可以决定指定 group。您的回答解决了我的问题,但它没有回答为什么我自己应用 group 美学时我的数据点被视为丢失。
    猜你喜欢
    • 2018-04-23
    • 2017-10-07
    • 2019-10-29
    • 1970-01-01
    • 2022-06-16
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多