通过在 ggplot2 中画一个圆圈来突出显示 ggplot2 中的特定 x 轴元素

问题描述 投票:0回答:1

我有一个与我想要绘制的一些数据相关联的序列

myseq
。此外,我还有另一个序列
checkseq
我想与
myseq
进行比较。

目标是制作如下图所示的图(以

myseq
作为 x 轴标签),但以某种方式突出显示
myseq
中与该位置中的
checkseq
不同的字母。

为此,我无法使用

element_markdown
更改它们的颜色,因为在现实生活中我已经出于其他目的这样做了。我认为下一个最好的办法是在这些字母周围画一个圆圈或正方形。

这是我的MWE:

myseq <- "AGAATATTATACATTCATCT"
set.seed(123)
mydata <- data.frame(time=1:100, value=rnorm(100, mean=10, sd=2))
indices <- seq(5, 100, length.out=20)
mysplit <- unlist(strsplit(myseq, ""))
#
checkseq <- "AGATTATTATAGGTTCATAT"
checksplit <- unlist(strsplit(checkseq, ""))
#
ind_df <- data.frame(call=mysplit, check=checksplit, time=indices)
ind_df$highlight <- ifelse(ind_df$call!=ind_df$check, TRUE, FALSE)
#
finaldf <- dplyr::left_join(mydata, ind_df, by="time")

P <- ggplot2::ggplot(finaldf, ggplot2::aes(x=time, y=value)) +
  ggplot2::geom_line(linewidth=0.5) +
  ggplot2::scale_x_continuous(breaks=indices, labels=seqsplit) +
  ggplot2::theme_light()
grDevices::pdf(file="test.pdf", height=4, width=10)
print(P)
grDevices::dev.off()

产生这个情节:

plot1

我想要的是下面的图,通过在字母周围画一个圆圈(或正方形)来突出显示带有

highlight==TRUE
的字母。

plot2

r ggplot2 sequence draw highlight
1个回答
0
投票

我建议添加检查序列作为辅助轴标签:

ggplot2::ggplot(finaldf, ggplot2::aes(x = time, y = value)) +
  ggplot2::geom_line(linewidth = 0.5) +
  ggplot2::scale_x_continuous(
    name = "Sequence",
    breaks = indices,
    labels = mysplit,
    sec.axis = ggplot2::sec_axis(
      transform = identity,
      name = "Check Sequence",
      breaks = indices,
      labels = checksplit
    )
  ) +
  ggplot2::geom_rect(
    data = finaldf[finaldf$highlight, ],
    ggplot2::aes(
      xmin = time - 0.5,
      xmax = time + 0.5,
      ymin = -Inf,
      ymax = Inf
    ),
    fill = "red", alpha = 0.2
  ) +
  ggplot2::theme_light()
#> Warning: Removed 80 rows containing missing values or values outside the scale range
#> (`geom_rect()`).

非常好奇是否有人想出一种在轴上添加注释的方法。

© www.soinside.com 2019 - 2024. All rights reserved.