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

使用ggplot2为正态分布图添加点标签并调整点位置

解决ggplot2正态分布图的两个标签与点位置问题

1. 为数据点添加medias_df的数值标签

使用geom_text()或geom_label()可直接将medias_df中的数值映射为数据点的标签。核心是在aes()中通过label参数关联数据框的目标列,同时用vjust/hjust调整标签位置避免与点重叠:

# 在已有绘图基础上添加标签
p <- p + geom_text(
  data = medias_df,
  aes(x = 你的x坐标列名, y = 0, label = 要显示的数值列名),
  vjust = 1.5,  # 让标签位于点下方,避免遮挡曲线或点
  color = "darkblue",
  size = 4
)

如果需要带背景的标签(防止与曲线重叠),替换为geom_label()即可,参数逻辑完全一致。

2. 调整数据点位置让x轴穿过它们

默认x轴对应y=0的位置,只需将数据点的y坐标设为0,就能让x轴穿过这些点。若x轴位置被修改过,可通过coord_cartesian()锁定y轴范围确保对齐:

# 绘制位于x轴上的数据点
p <- p + geom_point(
  data = medias_df,
  aes(x = 你的x坐标列名, y = 0),
  size = 3,
  color = "darkred"
)

# 可选:锁定y轴范围,确保x轴始终穿过点
p <- p + coord_cartesian(ylim = c(0, max(你的密度值)))

完整示例代码

# 模拟示例数据
set.seed(456)
dist_data <- data.frame(x = seq(-4, 4, length.out = 200))
mean_val <- 0
sd_val <- 1
medias_df <- data.frame(x_pos = c(-2, -1, 0, 1, 2), label = c("μ-2σ", "μ-σ", "μ", "μ+σ", "μ+2σ"))

# 完整绘图流程
ggplot(dist_data, aes(x = x)) +
  stat_function(fun = dnorm, args = list(mean = mean_val, sd = sd_val), linewidth = 1) +
  # 放置数据点在x轴(y=0)
  geom_point(data = medias_df, aes(x = x_pos, y = 0), size = 4, color = "darkred") +
  # 添加对应标签
  geom_text(data = medias_df, aes(x = x_pos, y = 0, label = label), vjust = -1, color = "darkred", fontface = "bold") +
  # 确保x轴穿过点,调整y轴显示范围
  coord_cartesian(ylim = c(0, 0.4)) +
  theme_minimal() +
  theme(axis.line.x = element_line(color = "black"),
        axis.line.y = element_line(color = "black"))

内容的提问来源于stack exchange,提问作者replicante

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:15:00