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

如何在R语言中基于多TSV文件创建带密度曲线的重叠直方图

多TSV文件重叠直方图+密度曲线解决方案

直接上修改后的完整代码:

# 设置参数
lower_bound <- 0.001
upper_bound <- 5

# 获取当前目录下所有.tsv文件的完整路径
file_paths <- list.files(pattern = "\\.tsv$", full.names = TRUE)

# 批量读取并预处理每个文件的数据
all_data <- lapply(file_paths, function(path) {
  # 读取TSV文件
  df <- read.delim(path, sep = "\t")
  # 过滤Ks值在指定范围内的数据
  df_filtered <- df[df$Ks < upper_bound & df$Ks > lower_bound, ]
  # 按Family和Node分组计算Ks的均值
  dff <- aggregate(Ks ~ Family + Node, data = df_filtered, FUN = mean)
  # 生成对称的Ks数据
  ks_values <- c(dff$Ks, -dff$Ks + lower_bound)
  # 返回带文件名标识的数据框,方便后续分组绘图
  data.frame(ks = ks_values, file_name = basename(path))
})

# 将所有文件的数据合并到一个统一的数据框
combined_data <- do.call(rbind, all_data)

# 初始化绘图画布:先绘制空的基础直方图(白色填充,无边界)
hist(combined_data$ks, prob = TRUE, xlim = c(0, upper_bound), n = 50, 
     col = "white", border = NA, main = "重叠Ks分布直方图与密度曲线", 
     xlab = "Ks值", ylab = "密度")

# 生成对应文件数量的颜色向量
colors <- rainbow(length(file_paths))

# 循环绘制每个文件的透明直方图和密度曲线
for (i in seq_along(file_paths)) {
  # 提取当前文件的数据集
  current_data <- combined_data[combined_data$file_name == basename(file_paths[i]), ]
  # 绘制透明直方图(alpha.f控制透明度)
  hist(current_data$ks, prob = TRUE, xlim = c(0, upper_bound), n = 50, 
       col = adjustcolor(colors[i], alpha.f = 0.3), border = NA, add = TRUE)
  # 计算密度并绘制曲线
  dens <- density(current_data$ks, from = 0, to = upper_bound)
  lines(dens, col = colors[i], lwd = 2)
}

# 添加图例,区分不同文件的分布
legend("topright", legend = basename(file_paths), 
       fill = adjustcolor(colors, alpha.f = 0.3), 
       border = NA, lty = 1, col = colors, lwd = 2, cex = 0.8)

关键改动说明

  • 多文件批量处理:用list.files自动抓取所有TSV文件,lapply循环处理每个文件,同时给每条数据标记文件名,实现分组依据。
  • 分层叠加绘图:先绘制空的基础画布,再通过add=TRUE逐个叠加不同文件的直方图和曲线,避免初始绘图覆盖后续内容。
  • 透明化与颜色区分:用adjustcolor给直方图设置透明度,rainbow生成差异化颜色,解决单一纯色问题,同时保证重叠部分可见。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 14:18:09