在R语言中如何绘制非均匀尖峰栅格图?含多试验实现方法
绘制非齐次泊松过程的栅格图(单次+10次试验)
嘿,刚接触R完全不用慌,咱们一步步搞定这个NHPP栅格图的问题~
第一步:先搞定单次试验的栅格图
假设你已经有了单次试验的尖峰时间序列nhpp1(比如像c(0.8, 2.3, 5.1, 7.9, 9.4)这样的数值向量),用base R就能快速画出栅格图:
# 设定时间范围(0到10秒) time_range <- c(0, 10) # 绘制单次试验的栅格图 plot(NA, xlim = time_range, ylim = c(0.8, 1.2), xlab = "时间(秒)", ylab = "试验1", main = "单次NHPP尖峰栅格图", yaxt = "n") # 隐藏默认y轴刻度 axis(2, at = 1, labels = "试验1") # 手动添加对应试验的y轴标签 # 给每个尖峰画竖线(也可以用points画点,看你偏好) for(t in nhpp1){ abline(v = t, col = "black", lwd = 2) }
如果你更喜欢用ggplot2(语法更直观,后期扩展也方便),代码是这样的:
library(ggplot2) # 把时间序列转换成数据框,适配ggplot的输入格式 df_single <- data.frame(time = nhpp1, trial = 1) ggplot(df_single, aes(x = time, y = trial)) + geom_vline(aes(xintercept = time), color = "black", linewidth = 1) + xlim(time_range) + ylim(0.8, 1.2) + labs(x = "时间(秒)", y = "试验编号", title = "单次NHPP尖峰栅格图") + theme(axis.text.y = element_text(angle = 0, vjust = 0.5))
第二步:扩展到10次试验
首先,咱们先把10次试验的尖峰序列整理好(如果你已经有现成数据,直接跳过生成步骤,把数据放进列表就行)。假设你用自己的NHPP生成函数generate_nhpp(),可以这样批量生成:
# 生成10次试验的NHPP尖峰序列,存到列表里 set.seed(123) # 设置随机种子,保证结果可重复 nhpp_list <- lapply(1:10, function(i) generate_nhpp())
接下来把列表数据转换成适合画图的长格式数据框:
# 合并所有试验数据,生成包含「时间」「试验编号」的数据集 df_all <- do.call(rbind, lapply(1:10, function(trial_num){ data.frame(time = nhpp_list[[trial_num]], trial = trial_num) }))
用base R画10次试验的栅格图:
plot(NA, xlim = time_range, ylim = c(0.5, 10.5), xlab = "时间(秒)", ylab = "试验编号", main = "10次NHPP尖峰栅格图", yaxt = "n") axis(2, at = 1:10, labels = 1:10) # 显示1-10的试验编号 # 循环给每个试验画尖峰竖线 for(trial in 1:10){ times <- nhpp_list[[trial]] for(t in times){ abline(v = t, col = "gray50", lwd = 1) } # 换成点表示尖峰的话,用这行代码替代上面的循环: # points(x = times, y = rep(trial, length(times)), pch = 16, cex = 0.8) }
用ggplot2画会更简洁美观:
ggplot(df_all, aes(x = time, y = trial)) + geom_point(pch = 16, color = "darkblue", size = 1.5) + # 用点表示尖峰 # 换成竖线的话,用这行替代:geom_vline(aes(xintercept = time), color = "gray50", linewidth = 0.8) xlim(time_range) + ylim(0.5, 10.5) + labs(x = "时间(秒)", y = "试验编号", title = "10次NHPP尖峰栅格图") + theme_bw() + # 用简洁的黑白主题 theme(axis.text.y = element_text(size = 10))
小提示
- 如果想让不同试验的尖峰用不同颜色区分,可以在
ggplot2的aes里加color = factor(trial),再用scale_color_discrete()调整配色。 - 尖峰数量多的时候,用点会比竖线更清晰;尖峰少的话,竖线能更直观体现时间点位置。
内容的提问来源于stack exchange,提问作者14thTimeLord
相关产品推荐
相关产品推荐

