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

如何在ggplot密度图中区分模拟数据线条并叠加真实数据

解决方案

假设你的模拟数据已整理为长格式(包含分组列sim_id标记1000次模拟,以及数值列sim_value存储每次模拟的结果),原始数据为work$Mins_Work,可以用以下代码实现需求:

1. 加载所需包

library(ggplot2)
library(tidyr) # 用于数据格式转换(若需要)

2. 绘制密度图

ggplot() +
  # 绘制1000组模拟数据的密度曲线,统一蓝色、半透明
  geom_density(data = sim_data, 
               aes(x = sim_value, group = sim_id),
               color = "blue", 
               alpha = 0.1, # 半透明避免线条重叠过密
               size = 0.5) +
  # 叠加原始数据的密度曲线,用红色加粗突出
  geom_density(data = work, 
               aes(x = Mins_Work),
               color = "red", 
               size = 1.2) +
  # 可选:添加标题和坐标轴标签
  labs(title = "模拟数据与原始数据的密度分布对比",
       x = "工作时长(分钟)",
       y = "密度") +
  theme_minimal()

关键细节说明

  • group = sim_id:强制ggplot将每条模拟数据的密度曲线作为独立线条绘制,即使颜色统一,也能保留1000条曲线的独立性。
  • alpha = 0.1:降低模拟曲线的透明度,避免1000条线重叠后完全遮挡细节。
  • 单独调用geom_density处理原始数据:不需要分组,直接用原始数据集work的Mins_Work字段,通过颜色和粗细区分模拟与原始数据。

如果你的模拟数据是宽格式(列名为sim_1, sim_2, ..., sim_1000),先转成长格式:

sim_data_long <- sim_data_wide %>%
  pivot_longer(cols = starts_with("sim_"), 
               names_to = "sim_id", 
               values_to = "sim_value")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:45:56