如何在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
相关产品推荐
相关产品推荐

