使用ggplot2基于两个data.frame的amount列绘制QQ图并添加y=x直线报错求助
解决QQ图绘制时的报错问题
嗨,我来帮你搞定这个报错~你遇到问题的原因很简单:qqplot()是Base R原生的绘图函数,而+是ggplot2包专属的语法,把两者混在一起用就会触发错误啦。下面给你两种可行的解决方案:
方案一:用Base R完成绘图(最直接)
直接用Base R的语法组合qqplot()和abline()就可以,不需要用+号。完整代码如下:
# 定义数据 df1 <- data.frame(amount = c(119.00,191.41,69.00,396.80,245.00,24.50,300.00,149.77,599.01,397.65)) df2 <- data.frame(amount = c(60.00,336.38,115.37,220.01,60.00,611.88,189.78,129.98,34.90,45.00)) # 绘制QQ图 qqplot(df1$amount, df2$amount, xlab = "df1的amount", ylab = "df2的amount", main = "QQ图(Base R版)") # 添加y=x参考线,a是截距,b是斜率,col设置颜色,lwd设置线宽 abline(a = 0, b = 1, col = "red", lwd = 2)
运行这段代码后,就能看到带红色y=x直线的QQ图了,点越贴近这条直线,说明两个数据集的分布越一致。
方案二:用ggplot2实现QQ图(适合习惯ggplot的用户)
如果更偏好ggplot2的绘图风格,我们可以手动计算两个数据集的分位数,再用ggplot来绘制:
library(ggplot2) # 定义数据 df1 <- data.frame(amount = c(119.00,191.41,69.00,396.80,245.00,24.50,300.00,149.77,599.01,397.65)) df2 <- data.frame(amount = c(60.00,336.38,115.37,220.01,60.00,611.88,189.78,129.98,34.90,45.00)) # 计算两个数据集的分位数(这里取10个分位点,和qqplot默认一致) quant_data <- data.frame( df1_quantiles = quantile(df1$amount, seq(0, 1, length.out = 10)), df2_quantiles = quantile(df2$amount, seq(0, 1, length.out = 10)) ) # 用ggplot绘制QQ图 ggplot(quant_data, aes(x = df1_quantiles, y = df2_quantiles)) + geom_point(size = 2, color = "steelblue") + geom_abline(intercept = 0, slope = 1, color = "red", linewidth = 1.2) + labs(x = "df1 amount 分位数", y = "df2 amount 分位数", title = "QQ图(ggplot2版)") + theme_bw()
这样就能用ggplot2的语法完成绘图,同时也能清晰对比两个数据集的分布情况。
内容的提问来源于stack exchange,提问作者steves
相关产品推荐
相关产品推荐

