我需要绘制共识序列(以图片为例)。为此,我需要调整字母的高度,保持相同的宽度。有没有简单的方法可以在 R 中做到这一点?提前致谢。
问问题
298 次
1 回答
0
我也对显示扭曲的文本感兴趣并遇到了这个页面。关于 SO的另一个相关问题指向 1)将文本保存为图像并使用 rasterGrob() 进行绘图,或者 2)使用 grImport 包并使用 grid 包进行绘图。
这些选项对我来说都很麻烦,所以我很高兴看到 Henrik 在评论中提到的 seqLogo 包是如何处理这个问题的。然而,虽然绕过保存到文件非常聪明,但它并不是一个可以应用于其他地方的通用解决方案。或者至少对我来说,因为我使用的符号不是 A、T、C 和 G。
seqLogo 作者首先手动定义了每个字母的形状。例如,这里是字母 T:
letterT <- function(x.pos,y.pos,ht,wt,id=NULL){
x <- c(0,10,10,6,6,4,4,0)
y <- c(10,10,9,9,0,0,9,9)
x <- 0.1*x
y <- 0.1*y
x <- x.pos + wt*x
y <- y.pos + ht*y
if (is.null(id)){
id <- rep(1,8)
}else{
id <- rep(id,8)
}
fill <- "red"
list(x=x,y=y,id=id,fill=fill)
}
您可以在函数签名中看到,形状的计算取决于 ht 和 wt、高度和宽度,从而允许字母扭曲。然后使用 grid.polygon 函数绘制字母:
grid.polygon(x=unit(letters$x,"native"), y=unit(letters$y,"native"),
id=letters$id,
gp=gpar(fill=letters$fill,col="transparent"))
如果您只处理核苷酸 - 或者有某种方式来定义您打算使用的所有字符形状 - 我会说这将是一个很好的方法,并且比保存一堆 .png 文件和加载更干净他们。
于 2014-06-27T16:20:07.200 回答