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

ggplot2绘图需求:按染色体着色+仅显示geom_vline图例

全基因组数据绘图问题

我有一个全基因组数据集,希望按以下方式绘图:

  • 每条染色体使用不同颜色
  • 用geom_vline高亮来自另一表格的特定区间
  • 图例仅显示geom_vline元素

我尝试了多种方法,但似乎无法同时满足这三个要求!

第一种尝试(实现前两个要求,无法显示geom_vline图例)

ggplot(allStats, aes(x = mid2, y = Fst_group1_group5,
                     color = as_factor(scaffold))) +
  geom_point(size = 2) +
  geom_vline(xintercept = chrom$add, color = "grey") +
  scale_y_continuous(expand = c(0,0), limits = c(0, 1)) +
  scale_x_continuous(labels = chrom$chrID, breaks = axis_set$center) +
  scale_color_manual(values = rep(c("#276FBF", "#183059"), unique(length(chrom$chrID)))) +
  scale_size_continuous(range = c(0.5,3)) +
  labs(x = NULL, 
       y = "Fst SBM vs OC") + 
  theme_minimal() +
  theme( 
    legend.position = "none",
    panel.grid.major.x = element_blank(),
    panel.grid.minor.x = element_blank(),
    panel.grid.major.y = element_blank(),
    panel.grid.minor.y = element_blank(),
    axis.title.y = element_text(),
    axis.text.x = element_text()) +
  geom_vline(data = allStats_fstPi_group15,
             aes(xintercept = allStats_fstPi_group15$mid2),
             color = "orange", show.legend = T)

绘图效果:染色体按指定交替颜色分块显示,橙色竖线成功高亮目标区间,但图例被完全隐藏,无法展示橙色竖线的说明信息

第二种尝试(实现后两个要求,无法按染色体分块着色)

cols <- c("SBM vs OC" = rep(c("#276FBF", "#183059"), unique(length(chrom$chrID))), 
          "90th percentile (Fst vs Pi)" = "orange")

ggplot(allStats, aes(x = mid2)) +
  geom_point(aes(y = Fst_group1_group5, 
                 color = as_factor(scaffold)), 
             size = 2) +
  geom_vline(data = allStats_fstPi_group15,
             aes(xintercept = allStats_fstPi_group15$mid2, 
                 color = "90th percentile (Fst vs Pi)")) +
  scale_color_manual(values = cols)

绘图效果:图例正常显示橙色竖线的说明,但染色体无法按预期的交替颜色分块呈现

我了解到图例问题在于color需要放在aes()中,所以想询问:我想要实现的效果是否无法达成?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:50:34