我有一个与我想要绘制的一些数据相关联的序列
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()
产生这个情节:
我想要的是下面的图,通过在字母周围画一个圆圈(或正方形)来突出显示带有
highlight==TRUE
的字母。
我建议添加检查序列作为辅助轴标签:
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()`).
非常好奇是否有人想出一种在轴上添加注释的方法。