r - ggplot2 突出显示字母串
问题描述
不确定这是否可以使用 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")
所以基本上我试图突出主字符串中的模式
我正在苦苦挣扎的是,当我在 df 中有不止一个主时,我只显示两行我有超过 500 行不同的开始和结束,但我的长度(主)总是 29 个字符
# test
t <- read.table(text="locus main pattern score gap
+ REF1 TCTGTCTCTGCTCCCCTGCTTTTCAGGTG CTCCCCTGCTTTT 148 -4
+ REF2 TTTTTTTTGGCTCTTTTCCTCCTAAGAGC CTCTTTTCCTC 164 -6", sep='\t', header=T, stringsAsFactors=F )
#get start and end
t$start <- str_locate_all(pattern = t$pattern, t$main)[[1]][1]
t$end <- str_locate_all(pattern = t$pattern, t$main)[[2]][1]
t
loci main pattern score gap start end
1 REF1 TCTGTCTCTGCTCCCCTGCTTTTCAGGTG CTCCCCTGCTTTT 148 -4 11 23
2 REF2 TTTTTTTTGGCTCTTTTCCTCCTAAGAGC CTCTTTTCCTC 164 -6 11 23
不知道如何进行
解决方案
我认为您的代码中有一个错误,如果我们看看以下结果str_locate
:
str_locate_all(pattern = t$pattern, t$main)
[[1]]
start end
[1,] 11 23
[[2]]
start end
[1,] 11 21
如果我们查看第二个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)
也就是说,您可以通过以下方式处理多个字符串,方法是为不同的层提供不同的数据。
# 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")
推荐阅读
- python - 访问 API 响应并提取特定信息
- c# - CommandParameter MultiBinding 返回具有空元素的数组
- node.js - Apache API 代理到 nodejs
- javascript - jquery html 之后的新元素
- javascript - 选中时如何使选项卡面板的每个框都着色?
- arrays - ReactJS/Typescript:无法访问作为带有编号索引的道具传递的字符串数组
- arm64 - 讲解arm64指令STP
- json - 如何从 Twitter API 中获取数据并显示最后的推文
- tensorflow - Conv1DTranspose 到特定长度
- reactjs - 是否可以在 react-native-snap-carousel 上添加视频而不是图像?