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

如何用ggplot叠加HTRU2数据集两类样本的正态分布曲线?

基于HTRU2数据集绘制两类正态分布叠加曲线

首先修正数据汇总逻辑:你当前的pulsar_data_summary里计算的mean_stdev_ip是Stdev_IP特征的均值,并非Mean_IP的标准差。要画正态分布曲线,我们需要每个类别下目标特征(比如Mean_IP)的均值和标准差,先调整汇总代码:

# 修正数据汇总:计算每个类别下目标特征的均值与标准差
pulsar_data_summary <- pulsar_data %>%
  group_by(Class) %>%
  summarize(
    mean_ip = mean(Mean_IP),
    sd_ip = sd(Mean_IP),  # 新增:计算Mean_IP的标准差
    mean_dm = mean(Mean_DM),
    sd_dm = sd(Mean_DM)   # 新增:计算Mean_DM的标准差
  ) %>%
  mutate(Class = as.factor(Class))  # 修正Class为因子类型

接下来用ggplot绘制叠加的正态分布曲线,以Mean_IP为例:

library(ggplot2)

# 生成覆盖数据范围的x序列,保证曲线平滑完整
x_seq <- seq(min(pulsar_data$Mean_IP), max(pulsar_data$Mean_IP), length.out = 1000)

# 构建绘图数据:为每个类别匹配对应的均值、标准差,计算密度值
plot_data <- expand.grid(x = x_seq, Class = c(0, 1)) %>%
  left_join(pulsar_data_summary, by = "Class") %>%
  mutate(density = dnorm(x, mean = mean_ip, sd = sd_ip))

# 绘制叠加分布曲线
ggplot(plot_data, aes(x = x, y = density, color = Class, fill = Class)) +
  geom_line(size = 1) +
  geom_area(alpha = 0.3, position = "identity") +  # 低透明度填充展示密度
  labs(
    x = "Mean of Integrated Profile",
    y = "Density",
    title = "Normal Distribution of Mean_IP by Class",
    color = "Class",
    fill = "Class"
  ) +
  theme_minimal()

代码说明:

  • x_seq生成足够密集的x值,确保曲线平滑无断层
  • expand.grid结合left_join为每个类别匹配对应的统计量,用dnorm计算正态分布密度
  • geom_area设置alpha=0.3实现低透明度填充,position="identity"保证曲线不重叠偏移
  • 若要绘制Mean_DM的分布,只需将代码中的Mean_IP、mean_ip、sd_ip替换为Mean_DM、mean_dm、sd_dm即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:01:25