r - stat_qq 设置组时去掉值

标签 r ggplot2

我正在尝试在 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)

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)

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). 

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

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

有什么办法可以克服这个问题吗?

最佳答案

由于您想违反 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)

enter image description here

关于r - stat_qq 设置组时去掉值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21572073/

相关文章:

R ggplot按日期分组,并从同一日期时间在x轴上绘制时间

regex - 从 R 中的字母数字字符中删除前导零

r - 没有这样的文件或目录(R 中的错​​误)

r - stat_contour binwidth 奇数

r - 在同一页面上绘制多个 ggplot2

r - ggplot 将颜色代码列与 R 数据框中的另一列匹配

r - ggplot:删除图例中的NA因子水平

c++ - R Rcpp big.matrix加入

r - 在几何密度脊线图中为平均值和分位数设置不同的颜色线

r - ggplot2:不同美学的传说