You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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的展示效果,可通过以下步骤实现:

  1. 构建因子时绑定原X值的标签
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 10:31:34