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

R语言按性别分组绘制带钟形曲线的直径直方图实现咨询

解决方案

你目前用的是lattice包的直方图函数,只需在原有代码基础上添加密度轴配置和自定义面板函数,就能在每个性别分面的直方图上叠加正态分布钟形曲线,修改后代码如下:

# 需确保已加载dplyr和lattice包
body %>% histogram(~ diameter|gender, 
                   col="dodgerblue3",
                   layout=c(1,2), 
                   data=., 
                   xlab="Diameter",
                   type = "density", # 将直方图Y轴改为密度维度,和正态曲线单位匹配
                   panel = function(x, ...) {
                     # 先绘制原有直方图
                     panel.histogram(x, ...)
                     # 计算当前分面对应性别组的直径均值、标准差
                     mu <- mean(x, na.rm = TRUE)
                     sigma <- sd(x, na.rm = TRUE)
                     # 生成平滑的拟合曲线坐标
                     x_line <- seq(min(x, na.rm = T), max(x, na.rm = T), length.out = 100)
                     y_line <- dnorm(x_line, mean = mu, sd = sigma)
                     # 绘制红色拟合曲线,可自行调整颜色、线宽参数
                     panel.lines(x_line, y_line, col = "firebrick", lwd = 2)
                   })

注意事项

  • 必须添加type = "density"参数:默认直方图Y轴是样本计数,正态曲线输出的是密度值,二者量级差异极大,不加的话曲线会几乎贴在X轴上看不到。
  • 如果你需要保留计数Y轴,可以将密度值做坐标换算:把上面的y_line计算逻辑替换为y_line <- dnorm(x_line, mean = mu, sd = sigma) * length(x) * hist(x, plot = F)$breaks[2]即可。
  • 代码中的na.rm = TRUE是为了自动跳过缺失值,避免计算均值、标准差时报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:57:04