2013-10-10 35 views
1

我需要繪製一致的序列(見圖像爲例)。爲此,我需要調整字母的高度保持相同的寬度。 R中有這麼簡單的方法嗎? 在此先感謝。如何在ggplot中獨立地改變文本的寬度和高度(即「扭曲」字母)?

example

+3

看看[seqLogo軟件包](http://www.bioconductor.org/packages/2.12/bioc/vignettes/seqLogo/inst/doc/seqLogo.pdf) – Henrik

+0

@Henrik,非常感謝!這似乎是我的情況下的解決方案。雖然我仍然很好奇,但總體而言,有沒有辦法改變字母的尺寸,所以我會留下這個問題。 –

+0

P.S. seqLogo軟件包只能通過Bioconductor使用,對吧? –

回答

0

我也有興趣在顯示文本扭曲和整個這個頁面來了。另一個related question on 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文件並加載它們要乾淨得多。

相關問題