作为一个 stats 和 R 新手,我一直很难尝试生成纵横比为 1:1 的 qqplots。ggplot2 似乎比默认的 R 绘图包提供了更多的绘图控制,但我看不到如何在 ggplot2 中执行 qqplot 来比较两个数据集。
所以我的问题是,ggplot2 相当于什么:
qqplot(datset1,dataset2)
作为一个 stats 和 R 新手,我一直很难尝试生成纵横比为 1:1 的 qqplots。ggplot2 似乎比默认的 R 绘图包提供了更多的绘图控制,但我看不到如何在 ggplot2 中执行 qqplot 来比较两个数据集。
所以我的问题是,ggplot2 相当于什么:
qqplot(datset1,dataset2)
最简单的事情就是看看是如何qqplot
工作的。所以在 R 类型中:
R> qqplot
function (x, y, plot.it = TRUE, xlab = deparse(substitute(x)),
ylab = deparse(substitute(y)), ...)
{
sx <- sort(x)
sy <- sort(y)
lenx <- length(sx)
leny <- length(sy)
if (leny < lenx)
sx <- approx(1L:lenx, sx, n = leny)$y
if (leny > lenx)
sy <- approx(1L:leny, sy, n = lenx)$y
if (plot.it)
plot(sx, sy, xlab = xlab, ylab = ylab, ...)
invisible(list(x = sx, y = sy))
}
<environment: namespace:stats>
所以要生成图,我们只需要得到sx
and sy
,即:
x <- rnorm(10);y <- rnorm(20)
sx <- sort(x); sy <- sort(y)
lenx <- length(sx)
leny <- length(sy)
if (leny < lenx)sx <- approx(1L:lenx, sx, n = leny)$y
if (leny > lenx)sy <- approx(1L:leny, sy, n = lenx)$y
require(ggplot2)
g = ggplot() + geom_point(aes(x=sx, y=sy))
g
当我也想要一条正常线时,我会使用它。
ggplot(data, aes(sample = data$column1)) + stat_qq(color="firebrick2", alpha=1) + geom_abline(intercept = mean(data$column1), slope = sd(data$column1))
如果您最初的需要只是控制纵横比,这是一种方法:
x <- rnorm(1000)
y <- rnorm(1500, 2)
myqq <- function(x, y, ...) {
rg <- range(x, y, na.rm=T)
qqplot(x, y, xlim=rg, ylim=rg, ...)
}
myqq(x, y)