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

ggplot2绘制gamlss模型拟合的密度曲线失败问题排查

解决ggplot2绘制gamlss模型Gamma密度曲线不显示的问题

你的ggplot代码无法显示曲线的核心问题有两个:

  • geom_line(aes(shapex, ratex))完全错误,shapex和ratex是单个数值,不是可映射的变量,也没有生成x轴序列来计算对应密度值
  • 直方图没有设置为密度刻度,导致曲线和直方图的y轴范围不匹配

修正后的完整代码

library(gamlss)
library(ggplot2)

data(Orange)

# 拟合gamlss模型
mod.g <- gamlss(circumference ~ age, family=GA, data = Orange)

pred.g <- predict(mod.g, type = "r")
shapex <- (mean(pred.g)/sd(pred.g))^2
ratex <- mean(pred.g)/sd(pred.g)^2

# 生成x轴序列,覆盖circumference的取值范围
x_seq <- seq(min(Orange$circumference), max(Orange$circumference), length.out = 1000)
# 计算每个x对应的Gamma密度值
gamma_density <- data.frame(
  x = x_seq,
  density = dgamma(x_seq, shape = shapex, rate = ratex)
)

# ggplot绘图
ggplot(Orange, aes(x = circumference)) +
  # 直方图设置为密度刻度,和基础绘图的freq=FALSE对应
  geom_histogram(aes(y = ..density..), color = "black", fill = "#225EA8", binwidth=30) +
  # 调用生成的密度数据框,绘制曲线
  geom_line(data = gamma_density, aes(x = x, y = density), color = "blue", linewidth = 2) +
  labs(y = "Density") +
  theme(legend.title = element_text(size = 15),
        legend.text = element_text(size = 17),
        axis.title = element_text(size = 22),
        axis.text.x = element_text(color = "black", hjust=1),
        axis.text.y = element_text(color = "black", hjust=1),
        axis.text = element_text(size = 15),
        strip.text.x = element_text(size = 18))

关键修正点说明

  • 生成x_seq序列:确保覆盖数据中circumference的全部范围,用足够多的点让曲线平滑
  • 构建密度数据框:把x序列和对应的Gamma密度值存成数据框,供ggplot调用
  • 直方图设置aes(y = ..density..):让直方图的y轴显示密度,和曲线的y轴保持一致,否则曲线可能因为y轴范围不匹配被压缩到看不见
  • geom_line指定data = gamma_density:明确告诉ggplot用新的数据框来绘制曲线,而不是默认的Orange数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:16:04