`summarise()` has grouped output by 'cut'. You can override using the `.groups` argument.

Add a CpG density track by using bsseq to find all CpG sites in the genome and adding up CpG sites at each distance from the repeat start and end, plot as tile – light blue = high CpG content, dark blue = low CpG content


# now find overlaps between CpG sites and repeats
l1_regions <- regs %>%
  mutate(start = start - flankn, end = end + flankn) %>%
  GRanges()

ovl <- findOverlaps(t2t.cpg.loci, l1_regions)
genes.ovl <- as.data.frame(regs)[subjectHits(ovl),] %>%
  dplyr::mutate(genewidth = end - start) %>%
  dplyr::rename(gene_start = start, gene_end = end) 

chm13.ovl <- as.data.frame(t2t.cpg.loci[queryHits(ovl),]) %>%
  bind_cols(genes.ovl) %>%
  dplyr::rename(seqnames = 1) %>%
  dplyr::mutate(dist = ifelse(Orientation == "pos",start - gene_start, gene_end - start),
    dist = ifelse(dist < 0, dist/flankn,
      ifelse(dist < genewidth,
        bodylen * dist / genewidth,
        bodylen + (dist - genewidth)/flankn)), 
    dist = round(dist,2)
    )

# plot CpG density as heatmap -- the actual number doesnt mean anything, its just for visualization
chm13.ovl.labs <- chm13.ovl %>%
  group_by(ID) %>%
  mutate(total=n()) %>%
  ungroup() %>%
  group_by(dist) %>%
  summarise(med = sum(width), cg=med/total) %>%
  distinct()
`summarise()` has grouped output by 'dist'. You can override using the `.groups` argument.
  
q <- ggplot(chm13.ovl.labs, aes(x=dist,y=1, fill=cg))+geom_tile()+scale_x_continuous(breaks= c(-1,0,bodylen,bodylen + 1), labels = c(paste0("-",flankn/1e3,"kb"),"Start","End",paste0("+",flankn/1e3,"kb")))+theme_void()+theme(legend.position = "none")

# use cowplot to combine plots on the same X-axis
plot_grid(p,q, ncol=1, align = "v",rel_heights = c(3,.5))
Removed 9 row(s) containing missing values (geom_path).Removed 9 rows containing missing values (geom_point).
ggsave(
  paste0(figs,"CHM13_CEN18_metaplotREV_normalized_withCpGbar.pdf"),
  plot = last_plot(),
  scale = 1,
  width = 12,
  height = 8,
)

LS0tCnRpdGxlOiAiQ29tcG9zaXRlIEVsZW1lbnQgTWV0aHlsYXRpb24gVEVMT2NsdXN0ZXJzIgphdXRob3I6ICJBcmllbCIKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUIgJWQsICVZJylgIgpvdXRwdXQ6CiAgcGRmX2RvY3VtZW50OiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKbWFpbmZvbnQ6IERlamFWdSBTYW5zCnRpdGxlZm9udDogRGVqYVZ1IFNhbnMKLS0tCgpgYGB7ciBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCAgbWVzc2FnZT1GQUxTRSkKCiMgdGhlc2UgYXJlIG15IHBlcnNvbmFsIHV0aWxzIC0tIGZpbmQgdGhlbSBpbiB0aGUgdXRpbHMgZGlyIG9mIHRoZSBUMlQtRXBpZ2VuZXRpY3MgZ2l0IHJlcG8Kc291cmNlKCJ+L1QyVC1FcGlnZW5ldGljcy91dGlscy9pbGVlX3Bsb3RfdXRpbHMuUiIpCnNvdXJjZSgifi9UMlQtRXBpZ2VuZXRpY3MvdXRpbHMvbWV0aHlsYXRpb25fUl91dGlscy5SIikKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeSh6b28pCmxpYnJhcnkoYnNzZXEpCiMgQlNnZW5vbWUgcGFja2FnZSBmb3IgVDJUIGdlbm9tZSAtLSBmaW5kIG9uIGdsb2J1cyBhbmQgaW5zdGFsbApsaWJyYXJ5KEJTZ2Vub21lLnQydC52MS4wLnJlbGVhc2UpCgpmaWdzPSIva3liZXIvRGF0YS9OYW5vcG9yZS9BbmFseXNpcy9nbW9uZXkvQ0hNMTMvdjEuMF9maW5hbF9hc3NlbWJseS9URS9yZXZpc2lvbiIKZGF0PSIva3liZXIvRGF0YS9OYW5vcG9yZS9BbmFseXNpcy9nbW9uZXkvQ0hNMTMvdjEuMF9maW5hbF9hc3NlbWJseSIKYGBgCgpgYGB7ciBsb2FkRGF0YSwgaW5jbHVkZT1GfQpkYXQ9Ii9reWJlci9EYXRhL05hbm9wb3JlL0FuYWx5c2lzL2dtb25leS9DSE0xMy92MS4wX2ZpbmFsX2Fzc2VtYmx5IgpjaG0xM19tZXRoIDwtIHJlYWRfdHN2KHBhc3RlMChkYXQsICIvbWV0aHlsYXRpb25fY2FsbHMvbWV0aHlsYXRpb25fZnJlcXVlbmN5XzUwa2Jfc3BsaXQudHN2IikpICU+JQogIEdSYW5nZXMoKQoKcmVncyA8LSByZWFkX3RzdihwYXN0ZTAoZGF0LCAiL1RFL3JldmlzaW9uL2NocjE4LUwxSFMtSE9SZW1iZWQuYmVkIiksIGNvbF9uYW1lcyA9IFQpICU+JQogIG11dGF0ZShsZW49ZW5kLXN0YXJ0KSAlPiUKIyAgZmlsdGVyKGxlbj41MDApICU+JQogIyBmaWx0ZXIobGVuPDIwMDApICU+JQogIG11dGF0ZShJRD1uKCkpCgpgYGAKCmBgYHtyIDVrYiwgZWNobz1GfQoKIyBzaXplIG9mIGZsYW5raW5nIHJlZ2lvbgpmbGFua24gPC0gMTAwCiMgc2l6ZSBvZiByZXBlYXQgcmVsYXRpdmUgdG8gZmxhbmtpbmcgcmVnaW9uCmJvZHlsZW4gPC0gNQoKIyBhZGQgZmxhbmtzCmwxX3JlZ2lvbnMgPC0gcmVncyAlPiUKICBtdXRhdGUoc3RhcnQgPSBzdGFydCAtIGZsYW5rbiwgZW5kID0gZW5kICsgZmxhbmtuKSAlPiUKICBHUmFuZ2VzKCkKCiMgYWRkIG1ldGh5bGF0aW9uIGRhdGEKb3ZsIDwtIGZpbmRPdmVybGFwcyhjaG0xM19tZXRoLCBsMV9yZWdpb25zKQpnZW5lcy5vdmwgPC0gYXMuZGF0YS5mcmFtZShyZWdzKVtzdWJqZWN0SGl0cyhvdmwpLF0gJT4lCiAgZHBseXI6Om11dGF0ZShnZW5ld2lkdGggPSBlbmQgLSBzdGFydCkgJT4lCiAgZHBseXI6OnJlbmFtZShnZW5lX3N0YXJ0ID0gc3RhcnQsIGdlbmVfZW5kID0gZW5kKSAKCiMgY2FsY3VsYXRlIGRpc3RhbmNlIGZyb20gc3RhcnQgYW5kIGVuZCwgZGVwZW5kaW5nIG9uIHN0cmFuZCAKY2htMTMub3ZsIDwtIGFzLmRhdGEuZnJhbWUoY2htMTNfbWV0aFtxdWVyeUhpdHMob3ZsKSxdKSAlPiUKICBiaW5kX2NvbHMoZ2VuZXMub3ZsKSAlPiUKICBkcGx5cjo6cmVuYW1lKHNlcW5hbWVzID0gMSkgJT4lCiAgbXV0YXRlKGRpc3QgPSBpZmVsc2UoT3JpZW50YXRpb249PSJwb3MiLCBzdGFydCAtIGdlbmVfc3RhcnQsIGdlbmVfZW5kLXN0YXJ0KSkgJT4lCiAgbXV0YXRlKGRpc3QgPSBpZmVsc2UoZGlzdCA8IDAsIGRpc3QvZmxhbmtuLAogICAgICBpZmVsc2UoZGlzdCA8IGdlbmV3aWR0aCwKICAgICAgICBib2R5bGVuICogZGlzdCAvIGdlbmV3aWR0aCwKICAgICAgICBib2R5bGVuICsgKGRpc3QgLSBnZW5ld2lkdGgpL2ZsYW5rbikpLCAKICAgIGRpc3QgPSByb3VuZChkaXN0LDIpCiAgICApCgojIGJpbiBkYXRhIHRvIG1ha2UgcGxvdCBwcmV0dHkKbl93aW5kb3dzPTEwMDAKY2htMTMub3ZsJGN1dCA9IGN1dChjaG0xMy5vdmwkZGlzdCwgYnJlYWtzPW5fd2luZG93cykKCmNobTEzLm92bC5sYWJzIDwtIGNobTEzLm92bCAlPiUKICBncm91cF9ieShjdXQsZ3JvdXApICU+JQogIHN1bW1hcmlzZShtZWQgPSBtZWRpYW4obWV0aHlsYXRlZF9mcmVxdWVuY3kpLCB0b3AgPSBxdWFudGlsZShtZXRoeWxhdGVkX2ZyZXF1ZW5jeSwgMC43NSksIGJvdCA9IHF1YW50aWxlKG1ldGh5bGF0ZWRfZnJlcXVlbmN5LCAwLjI1KSwgbl9nZW5lcyA9IGxlbmd0aChtZXRoeWxhdGVkX2ZyZXF1ZW5jeSkpICU+JQogIG11dGF0ZSh4X3RtcCA9IHN0cl9zdWIoY3V0LCAyLCAtMikpICU+JSAKICBzZXBhcmF0ZSh4X3RtcCwgYygibWluIiwgIm1heCIpLCBzZXAgPSAiLCIpICU+JSAKICBtdXRhdGVfYXQoYygibWluIiwgIm1heCIpLCBhcy5kb3VibGUpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShncm91cCkgJT4lCiAgYXJyYW5nZShtaW4pICU+JQogIG11dGF0ZShtZWRfc21vb3RoID0gcm9sbG1lYW4obWVkLCAxMCwgTkEpLHRvcF9zbW9vdGggPSByb2xsbWVhbih0b3AsIDEwLCBOQSksYm90X3Ntb290aCA9IHJvbGxtZWFuKGJvdCwgMTAsIE5BKSkKCiMgcGxvdCAtLSBpbmNsdWRlIGFubm90YXRpb24gZm9yIG51bWJlciBvZiByZXBlYXRzIGluIGVhY2ggZ3JvdXAKcCA8LSBnZ3Bsb3QoY2htMTMub3ZsLmxhYnMsYWVzKCB4ID0gbWluLCB5ID0gbWVkX3Ntb290aCwgY29sb3I9Z3JvdXAsIGZpbGw9Z3JvdXApLCBhbHBoYT0uNSkrCiAgZ2VvbV9yaWJib24oYWVzKHltaW49Ym90X3Ntb290aCwgeW1heD10b3Bfc21vb3RoKSwgYWxwaGE9MC4yLCBzaXplPTApKwogIGdlb21fbGluZShhZXMoeT1tZWRfc21vb3RoKSwgYWxwaGE9LjUsIHNpemU9MSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDApICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBib2R5bGVuKSsKICBnZW9tX3BvaW50KGFscGhhPS41KSsKICBsYWJzKCB4ID0gIkdlbm9taWMgUG9zaXRpb24iLCB5ID0gIkFnZ3JlZ2F0ZWQgTWV0aHlsYXRpb24gRnJlcXVlbmN5IikgKwogIHRoZW1lX2NsYXNzaWMoKStzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPSBjKC0xLDAsYm9keWxlbixib2R5bGVuICsgMSksIGxhYmVscyA9IGMocGFzdGUwKCItIixmbGFua24vMWUzLCJrYiIpLCJTdGFydCIsIkVuZCIscGFzdGUwKCIrIixmbGFua24vMWUzLCJrYiIpKSkrdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKQojKwojZ2VvbV90ZXh0KGRhdGEgPSBjaG0xMy5vdmwgJT4lIAojICAgICAgICAgICAgICBncm91cF9ieShyZWdpb24pICU+JQojICAgICAgICAgICAgICBkcGx5cjo6c2VsZWN0KHJlZ2lvbixnZW5lX3N0YXJ0KSAlPiUKIyAgICAgICAgICAgICAgZGlzdGluY3QoKSAlPiUKIyAgICAgICAgICAgICAgc3VtbWFyaXNlKG5fZ2VuZXM9bigpKSAlPiUKIyAgICAgICAgICAgICAgZGlzdGluY3QoKSAlPiUKIyAgICAgICAgICAgICAgbXV0YXRlKGhlaWdodD1jYXNlX3doZW4ocmVnaW9uID09ICJ5ZXMiIH4gMCwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbiA9PSAibm8iIH4gLjEsIAojICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gLjAyKSksCiMgICAgICAgICAgICBhZXMoeD0xLAojICAgICAgICAgICAgICAgIHk9Ljg1K2hlaWdodCwKIyAgICAgICAgICAgICAgICBsYWJlbD1wYXN0ZSgibiA9Iixjb21tYShuX2dlbmVzKSkKIyAgICAgICAgICAgICAgICApLCBoanVzdD0xKSsKI3RoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJ0b3AiKQojCgpwCgpnZ3NhdmUoCiAgcGFzdGUwKGZpZ3MsIkNITTEzX0NFTjE4X21ldGFwbG90UkVWX25vcm1hbGl6ZWQucGRmIiksCiAgcGxvdCA9IHAsCiAgc2NhbGUgPSAxLAogIHdpZHRoID0gMTIsCiAgaGVpZ2h0ID0gNSwKKQpgYGAKCgoKQWRkIGEgQ3BHIGRlbnNpdHkgdHJhY2sgYnkgdXNpbmcgYnNzZXEgdG8gZmluZCBhbGwgQ3BHIHNpdGVzIGluIHRoZSBnZW5vbWUgYW5kIGFkZGluZyB1cCBDcEcgc2l0ZXMgYXQgZWFjaCBkaXN0YW5jZSBmcm9tIHRoZSByZXBlYXQgc3RhcnQgYW5kIGVuZCwgcGxvdCBhcyB0aWxlIC0tIGxpZ2h0IGJsdWUgPSBoaWdoIENwRyBjb250ZW50LCBkYXJrIGJsdWUgPSBsb3cgQ3BHIGNvbnRlbnQgCgpgYGB7cn0KCiMgY291bnQgQ0cgc2l0ZXMgZnJvbSBic3NlcSBwYWNrYWdlIC0tIHRha2VzIGEgaG90IHNlYywgc2F2ZSBhcyByYnMgZmlsZSBmb3IgZnV0dXJlIHVzZQp0MnQuY3BnLmxvY2kgPC0gZmluZExvY2kocGF0dGVybiA9ICJDRyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0ID0gQlNnZW5vbWUudDJ0LnYxLjAucmVsZWFzZTo6QlNnZW5vbWUudDJ0LnYxLjAucmVsZWFzZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJhbmQgPSAiKyIpCiMgeW91IHNob3VsZCBjb3VudCB+MzJNIENwR3MKbGVuZ3RoKHQydC5jcGcubG9jaSkKCiMgbm93IGZpbmQgb3ZlcmxhcHMgYmV0d2VlbiBDcEcgc2l0ZXMgYW5kIHJlcGVhdHMKbDFfcmVnaW9ucyA8LSByZWdzICU+JQogIG11dGF0ZShzdGFydCA9IHN0YXJ0IC0gZmxhbmtuLCBlbmQgPSBlbmQgKyBmbGFua24pICU+JQogIEdSYW5nZXMoKQoKb3ZsIDwtIGZpbmRPdmVybGFwcyh0MnQuY3BnLmxvY2ksIGwxX3JlZ2lvbnMpCmdlbmVzLm92bCA8LSBhcy5kYXRhLmZyYW1lKHJlZ3MpW3N1YmplY3RIaXRzKG92bCksXSAlPiUKICBkcGx5cjo6bXV0YXRlKGdlbmV3aWR0aCA9IGVuZCAtIHN0YXJ0KSAlPiUKICBkcGx5cjo6cmVuYW1lKGdlbmVfc3RhcnQgPSBzdGFydCwgZ2VuZV9lbmQgPSBlbmQpIAoKY2htMTMub3ZsIDwtIGFzLmRhdGEuZnJhbWUodDJ0LmNwZy5sb2NpW3F1ZXJ5SGl0cyhvdmwpLF0pICU+JQogIGJpbmRfY29scyhnZW5lcy5vdmwpICU+JQogIGRwbHlyOjpyZW5hbWUoc2VxbmFtZXMgPSAxKSAlPiUKICBkcGx5cjo6bXV0YXRlKGRpc3QgPSBpZmVsc2UoT3JpZW50YXRpb24gPT0gInBvcyIsc3RhcnQgLSBnZW5lX3N0YXJ0LCBnZW5lX2VuZCAtIHN0YXJ0KSwKICAgIGRpc3QgPSBpZmVsc2UoZGlzdCA8IDAsIGRpc3QvZmxhbmtuLAogICAgICBpZmVsc2UoZGlzdCA8IGdlbmV3aWR0aCwKICAgICAgICBib2R5bGVuICogZGlzdCAvIGdlbmV3aWR0aCwKICAgICAgICBib2R5bGVuICsgKGRpc3QgLSBnZW5ld2lkdGgpL2ZsYW5rbikpLCAKICAgIGRpc3QgPSByb3VuZChkaXN0LDIpCiAgICApCgojIHBsb3QgQ3BHIGRlbnNpdHkgYXMgaGVhdG1hcCAtLSB0aGUgYWN0dWFsIG51bWJlciBkb2VzbnQgbWVhbiBhbnl0aGluZywgaXRzIGp1c3QgZm9yIHZpc3VhbGl6YXRpb24KY2htMTMub3ZsLmxhYnMgPC0gY2htMTMub3ZsICU+JQogIGdyb3VwX2J5KElEKSAlPiUKICBtdXRhdGUodG90YWw9bigpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkoZGlzdCkgJT4lCiAgc3VtbWFyaXNlKG1lZCA9IHN1bSh3aWR0aCksIGNnPW1lZC90b3RhbCkgJT4lCiAgZGlzdGluY3QoKQogIApxIDwtIGdncGxvdChjaG0xMy5vdmwubGFicywgYWVzKHg9ZGlzdCx5PTEsIGZpbGw9Y2cpKStnZW9tX3RpbGUoKStzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPSBjKC0xLDAsYm9keWxlbixib2R5bGVuICsgMSksIGxhYmVscyA9IGMocGFzdGUwKCItIixmbGFua24vMWUzLCJrYiIpLCJTdGFydCIsIkVuZCIscGFzdGUwKCIrIixmbGFua24vMWUzLCJrYiIpKSkrdGhlbWVfdm9pZCgpK3RoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCiMgdXNlIGNvd3Bsb3QgdG8gY29tYmluZSBwbG90cyBvbiB0aGUgc2FtZSBYLWF4aXMKcGxvdF9ncmlkKHAscSwgbmNvbD0xLCBhbGlnbiA9ICJ2IixyZWxfaGVpZ2h0cyA9IGMoMywuNSkpCgpnZ3NhdmUoCiAgcGFzdGUwKGZpZ3MsIkNITTEzX0NFTjE4X21ldGFwbG90UkVWX25vcm1hbGl6ZWRfd2l0aENwR2Jhci5wZGYiKSwKICBwbG90ID0gbGFzdF9wbG90KCksCiAgc2NhbGUgPSAxLAogIHdpZHRoID0gMTIsCiAgaGVpZ2h0ID0gOCwKKQoKYGBgCgoKCgoKCgo=