R ggplot2突出显示字母串

R ggplot2突出显示字母串,r,string,ggplot2,plot,R,String,Ggplot2,Plot,不确定是否可以使用ggplot2,这是我目前所拥有的 我有两条线 main="TTTTTTTTGGCTCTTTTCCTCCTAAGAGC" search="CTCTTTTCCTC" 我要做的第一件事是使用 library(stringr) # this is later used to add x min and xmax str_locate_all(pattern ='CTCTTTTCCTC', "TTTTTTTTGGCTCTTTTCCTC

不确定是否可以使用ggplot2,这是我目前所拥有的

我有两条线

main="TTTTTTTTGGCTCTTTTCCTCCTAAGAGC"
search="CTCTTTTCCTC"
我要做的第一件事是使用

library(stringr)
# this is later used to add x min and xmax
str_locate_all(pattern ='CTCTTTTCCTC', "TTTTTTTTGGCTCTTTTCCTCCTAAGAGC")

# code 
ref <- unlist(stringr::str_split("TTTTTTTTGGCTCTTTTCCTCCTAAGAGC", ""))
whole.df <- data.frame(nts = c(ref),
                       poS = seq(1,29),
                       set = c("REF"))
ggplot(whole.df, aes_string(x = 'poS', y = 'set', col = 'nts',label = 'nts')) +
  geom_text(size = 4, family = "Courier") +
  geom_rect(xmin = 11 - 0.5,xmax = 21 + 0.5, ymin = 0.8, ymax = 1.2,
            fill = NA, col ="black")
库(stringr)
#这稍后用于添加x min和x max
str_locate_all(pattern='ctcttttctcc',“ttttttttggcttttccttccttaagag”)
#代码

ref如果我们看一下str\u locate的结果,我认为您的代码中有一个bug:

str_locate_all(pattern = t$pattern, t$main)
如果我们看第二个
end
值,它是21,而在
t
data.frame中,它报告为23

您可以使用以下方法修复此问题:

t$start <- sapply(str_locate_all(pattern = t$pattern, t$main), `[`, j = 1)
t$end <- sapply(str_locate_all(pattern = t$pattern, t$main), `[`, j = 2)

t$start这太完美了,我不知道你可以使用tileIt,它非常类似于
geom_rect
,但是使用x/y/width/height参数化,而不是xmin/xmax/ymin/ymax
[[1]]
     start end
[1,]    11  23

[[2]]
     start end
[1,]    11  21
t$start <- sapply(str_locate_all(pattern = t$pattern, t$main), `[`, j = 1)
t$end <- sapply(str_locate_all(pattern = t$pattern, t$main), `[`, j = 2)
# setting up the letter data
strings <- strsplit(t$main, "")
df <- data.frame(locus = rep(t$locus, lengths(strings)),
                 letters = unlist(strings),
                 pos = unlist(lapply(strings, seq_along)))

ggplot(df, aes(x = pos, y = locus, label = letters)) +
  geom_tile(data = t, aes(x = (start + end)/2, width = end - start + 1, y = locus),
            inherit.aes = FALSE, fill = NA, colour = "black", alpha = 0.5) +
  geom_text(aes(colour = letters), family = "mono")