如何在ggplot数值轴点图添加回归线或横向堆叠重叠点
解决ggplot2中数值轴点无重叠+回归线,或因子轴添加回归线的问题
方案一:数值型X轴实现无重叠点图+回归线
不用转因子,换用以下方法解决点重叠问题,同时保留数值X轴以正常添加回归线:
方法1:用geom_jitter添加可控偏移
给点添加随机水平偏移,避免重叠,偏移范围可通过width参数调整:
ggplot(data = plotting, aes(x = x, y = y, color = separator)) + geom_jitter(width = 0.2, height = 0, size = 2, alpha = 0.8) + scale_color_manual(values=c("palevioletred3", "deepskyblue3")) + geom_smooth(data = subset(plotting, separator == 0), method = "lm", se = FALSE, color = "violetred3") + geom_smooth(data = subset(plotting, separator == 1), method = "lm", se = FALSE, color = "dodgerblue3") + labs(title = "Learning and Learner Enjoyment", x = "Learner Enjoyment", y = "Learning")
方法2:用geom_beeswarm实现规整分布(需ggbeeswarm包)
点会沿X轴均匀分散,比jitter的随机偏移更规整:
# 先安装依赖包:install.packages("ggbeeswarm") library(ggbeeswarm) ggplot(data = plotting, aes(x = x, y = y, color = separator)) + geom_beeswarm(size = 2, alpha = 0.8) + scale_color_manual(values=c("palevioletred3", "deepskyblue3")) + geom_smooth(data = subset(plotting, separator == 0), method = "lm", se = FALSE, color = "violetred3") + geom_smooth(data = subset(plotting, separator == 1), method = "lm", se = FALSE, color = "dodgerblue3") + labs(title = "Learning and Learner Enjoyment", x = "Learner Enjoyment", y = "Learning")
方法3:用geom_count展示重叠密度
用点的大小表示该位置的重叠点数,直观展示数据分布密度:
ggplot(data = plotting, aes(x = x, y = y, color = separator)) + geom_count(alpha = 0.8) + scale_color_manual(values=c("palevioletred3", "deepskyblue3")) + geom_smooth(data = subset(plotting, separator == 0), method = "lm", se = FALSE, color = "violetred3") + geom_smooth(data = subset(plotting, separator == 1), method = "lm", se = FALSE, color = "dodgerblue3") + labs(title = "Learning and Learner Enjoyment", x = "Learner Enjoyment", y = "Learning")
方案二:因子型X轴添加回归线并保留原数值标签
如果偏好geom_dotplot的展示效果,可通过以下步骤实现:
- 构建因子时绑定原X值的标签
- 在
geom_smooth中明确使用原数值型X变量(线性回归需要数值输入)
示例代码:
# 构建带原数值标签的因子列(假设原X值范围是5-10) plotting$factor_x <- factor(plotting$x, levels = 5:10) ggplot(data = plotting, aes(x = factor_x, y = y, color = separator, fill = separator)) + geom_dotplot(binaxis = "y", dotsize = 0.5, stackgroups = TRUE, stackdir = "center", binpositions = "all") + scale_color_manual(values=c("palevioletred3", "deepskyblue3")) + # 手动指定geom_smooth的x为原数值型变量 geom_smooth(data = subset(plotting, separator == 0), aes(x = x), method = "lm", se = FALSE, color = "violetred3") + geom_smooth(data = subset(plotting, separator == 1), aes(x = x), method = "lm", se = FALSE, color = "dodgerblue3") + labs(title = "Sample", x = "Learner Enjoyment", y = "Learning") + # 确保X轴显示原5-10的数值标签 scale_x_discrete(labels = 5:10)
内容的提问来源于stack exchange,提问作者quinfog
相关产品推荐
相关产品推荐

