如何修改R代码实现象限散点图的整体样本拟合线需求?
解决方案
需求1:保留象限拟合线 + 添加整体拟合线
原代码中stat_smooth因继承了aes(color = quadrant),会按象限分组生成拟合线。要添加整体样本的拟合线,只需额外新增一个stat_smooth,并重置其分组和颜色参数,强制基于全量数据拟合:
# 创建带象限颜色编码的散点图(含象限拟合线+整体拟合线) ggplot(iris2, aes(x = Petal.Length, y = Petal.Width, color = quadrant)) + geom_vline(xintercept = x_mid) + geom_hline(yintercept = y_mid) + geom_point() + # 根据汇总表iris_labels添加标签 geom_label(data = iris_labels, aes(label = paste0("n = ", n), x = x, y = y, color = NULL, hjust = hjust, vjust = vjust), fill = NA, label.size = 0, show.legend = FALSE) + labs(title = "Quadrant Plot of Iris Data", x = "Petal Length", y = "Petal Width") + # 保留原象限拟合线 stat_smooth(method = lm, formula = y ~ x) + # 添加整体样本拟合线(用黑色虚线区分) stat_smooth(aes(color = NULL, group = 1), method = lm, formula = y ~ x, color = "black", linetype = "dashed")
解释:新增的stat_smooth通过aes(color = NULL, group = 1)取消了按象限的分组,强制基于全部数据拟合;用color = "black"和linetype = "dashed"可以和象限拟合线明显区分。
需求2:仅保留整体样本拟合线(移除象限拟合线)
只需将原有的按象限分组的stat_smooth替换为基于全量数据的拟合,重置color和group参数即可:
# 创建带象限颜色编码的散点图(仅含整体拟合线) ggplot(iris2, aes(x = Petal.Length, y = Petal.Width, color = quadrant)) + geom_vline(xintercept = x_mid) + geom_hline(yintercept = y_mid) + geom_point() + # 根据汇总表iris_labels添加标签 geom_label(data = iris_labels, aes(label = paste0("n = ", n), x = x, y = y, color = NULL, hjust = hjust, vjust = vjust), fill = NA, label.size = 0, show.legend = FALSE) + labs(title = "Quadrant Plot of Iris Data", x = "Petal Length", y = "Petal Width") + # 仅添加整体样本拟合线 stat_smooth(aes(color = NULL, group = 1), method = lm, formula = y ~ x)
解释:这里的stat_smooth通过aes(color = NULL, group = 1)取消了原有的按quadrant分组的逻辑,只会生成一条基于所有样本的拟合线,同时保留了原图表的象限颜色编码等样式。
内容的提问来源于stack exchange,提问作者newfinder
相关产品推荐
相关产品推荐

