1

我需要绘制共识序列(以图片为例)。为此,我需要调整字母的高度,保持相同的宽度。有没有简单的方法可以在 R 中做到这一点?提前致谢。

例子

4

1 回答 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 回答