我有一个简单的线图,其中 x 轴上显示了 DNA 序列,具体方式如下ggplot2
:
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)
seqsplit <- unlist(strsplit(myseq, ""))
ind_df <- data.frame(call=seqsplit, time=indices)
final_df <- dplyr::left_join(mydata, ind_df, by="time")
xcolors <- ifelse(seqsplit=="A", "green", ifelse(seqsplit=="C", "blue", ifelse(seqsplit=="G", "black", "red")))
P <- ggplot2::ggplot(final_df, ggplot2::aes(x=time, y=value)) +
ggplot2::geom_line(linewidth=0.5) +
ggplot2::scale_x_continuous(breaks=indices, labels=seqsplit) +
ggplot2::scale_y_continuous(limits=c(5,17)) +
ggplot2::theme_light() +
ggplot2::theme(axis.title.x=ggplot2::element_blank(),
axis.text.x=ggtext::element_markdown(face="bold", color=xcolors))
grDevices::pdf(file="test.pdf", height=3, width=10)
print(P)
grDevices::dev.off()
生成结果:
现在我有一个长度为 4 的相关氨基酸序列,我知道它在 DNA 序列中的起始和终止位置。氨基酸序列的每个字母对应于 DNA 序列中的 3 个字母。
aaseq <- "WXYZ"
start <- 5
end <- 17
这里氨基酸序列从上面的 DNA 序列WXYZ
开始T-5
并结束,我想将它们绘制在一起。C-17
这将是我的最终目标(它可能只是正方形而不是“箭头”):
有没有简单的方法可以实现这一目标ggplot2
?
没有箭头的一个简单选择是使用
geom_segment
:但是如果您想要箭头,那么我建议您尝试一下,
geom_polygon
但是这需要花费一些精力来创建带有多边形坐标的数据框:根据@stefan 的回答,我认为我仍然想要箭头方向,但是多边形因我的真实数据而变得非常复杂......
这将进入一个 Shiny 应用程序,该应用程序以不同的数据作为输入,并且值
y
可能会有很大差异,因此定义多边形可能会变得一团糟。我尝试了
arrow
的参数geom_segment
,但没有得到我想要的结果。但是,只需geom_point
在 处绘制xend
菱形,其大小等于 ,linewidth
就geom_segment
可以以非常简单的方式完美地解决问题。生成结果: