首页 > 解决方案 > 如何使用 qqplotr::stat_qq_point 在 QQ 图中为点着色并提供数字键?

问题描述

我正在使用qqplotr::stat_qq_point()它是 ggplot2 的“附加组件”来显示分位数 - 分位数图。我想通过分组因子为点着色,并提供一个数字键。我还想包括一个 95% CI 带和拟合线。完成这些任务的一种连贯方法是使用ggplot2, stat_qq_band(CI from qqplotr), stat_qq_line(best fit line in both ggplot2and qqplotr) 和stat_qq_point(plot qq points from qqplotr)。但是,我无法弄清楚如何呈现数字键。

在我的代码(如下)中,省略了 95% CI 和拟合线,因为之后可以轻松添加它们。该代码提供了正确着色的点,但没有图例。

我知道我的代码非常笨拙。如果我理解正确,aesinstat_qq_point只接受sample参数而不接受colour. 这意味着为数据点图提供颜色和图形图例的常规策略不可用。

我在这里发现了一个非常相似的问题

但是,前面的问答有点“hack”。上一个问题中提出的策略是不使用stat_qq_point,而是使用基函数分别计算分位数qqnormgeom_point然后可以使用ggplot 函数及其附带的功能来单独着色点并提供数字键。

来自另一个问题的样本数据:

set.seed(1001)
N <- 1000
G <- 10
dd <- data_frame(x=runif(N),
         f=factor(sample(1:G,size=N,replace=TRUE)),
         y=rnorm(N)+2*x+as.numeric(f))
m1 <- lm(y~x,data=dd)
dda <- cbind(augment(m1),f=dd$f)

用我的方法使用这些数据如下:

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}

n = length(unique(dda$f))
colores_1 = gg_color_hue(n)
dda$Color <- colores_1[dda$f]

dda$theory_quant=qqnorm(dda$.resid,plot.it=FALSE)$x
dda$sample_quant=qqnorm(dda$.resid,plot.it=FALSE)$y

library(qqplotr)

ggplot() +
stat_qq_point(
    data = dda, 
    mapping = aes(sample = .resid),
    colour=dda$Color
) +
scale_colour_manual(
    values=unique(dda$Colour),
    name ="f", 
    labels=c(1:10)
) +
guides(
    colour = guide_legend(override.aes = list(fill=NA),ncol=2,byrow=TRUE)
     ) +
labs(x = "Theoretical Quantiles", y = "Sample Quantiles")

并产生以下内容,其中有彩色点但没有数字键:

![f 着色的分位数图

所以,总而言之,我想要一种使用 ggplot2 及其“附加组件”绘制 qq 图的方法,其中包含按分组着色的点、最佳拟合线、95% CI 和数字键qqplotr。但也许根本不可能使用qqplotr.

我认为将我的问题留在 SO 上会很有价值,以防自上一个问题被提出以来的 1.8 年中出现了任何更好的方法。

非常感谢您的帮助!

标签: rggplot2legend

解决方案


推荐阅读