在R语言中,qqplot(x,y)与plot(sort(x),sort(y))是否生成相同绘图?
在R语言中qqplot(x,y)与plot(sort(x),sort(y))是否生成相同绘图?
结论
是的,这两个命令生成的绘图完全一致。
原因
qqplot(x, y)的核心逻辑就是对输入的两个向量分别排序,然后绘制排序后x向量与排序后y向量的散点图,和直接执行plot(sort(x), sort(y))的绘图逻辑完全相同。
验证方法说明
你通过
qqnorm(100)生成数据后看到绘图一致,这个观察是正确的,还可以用更严谨的方式验证:
使用qqplot(x, y, plot.it = FALSE)参数,让函数只返回排序后的坐标数据而不绘图,再和sort(x)、sort(y)做对比:set.seed(123) x <- rnorm(100) y <- rnorm(100) # 获取qqplot的坐标数据 qq_coords <- qqplot(x, y, plot.it = FALSE) # 对比排序后的向量与qqplot返回的坐标 all.equal(qq_coords$x, sort(x)) # 输出TRUE all.equal(qq_coords$y, sort(y)) # 输出TRUE你尝试用
qqplot(x,y) == plot(sort(x),sort(y))对比得到logical(0),是因为两个函数的返回值类型不同:qqplot()默认会返回一个包含排序后x、y坐标的list对象;plot()函数执行后返回的是NULL;
直接用==比较list和NULL是无效操作,因此得到无意义的logical(0)结果,不能用来判断绘图是否一致。
内容的提问来源于stack exchange,提问作者Filippo
相关产品推荐
相关产品推荐

