Создание «логотипа последовательности» с использованием ggplot2? - PullRequest
38 голосов
/ 26 марта 2011

Можно ли (в разумных пределах) построить график с логотипом последовательности , используя ggplot2?

Существует пакет для этого, который основан на "grid" и называется " seqLogo ", но мне было интересно, может ли быть его версия ggplot2.

Спасибо.

enter image description here

Ответы [ 6 ]

12 голосов
/ 16 марта 2015

Я отправляю попытку ggplot2, которая чем-то похожа на решение Лейпцига / Берри выше. Этот формат немного ближе к стандартной логограмме.

Но мое решение, и я думаю, что любое решение ggplot2, по-прежнему не дотягивает до конца, потому что ggplot2 не дает контроля над соотношением сторон символов печати . Это основная возможность, которая (я думаю) необходима для генерации логотипов последовательностей и отсутствует в ggplot2.

Также обратите внимание: я использовал данные ответа Джереми Лейпцига , но я не делал никаких поправок для небольших размеров выборки или для значений% GC, отличных от 50%.

require(ggplot2)
require(reshape2)

 freqs<-matrix(data=c(0.25,0.65,0.87,0.92,0.16,0.16,0.04,0.98,0.98,1.00,0.02,0.10,0.10,0.80,0.98,0.91,0.07,0.07,0.11,0.05,0.04,0.00,0.26,0.17,0.00,0.01,0.00,0.00,0.29,0.17,0.01,0.03,0.00,0.00,0.32,0.32,0.53,0.26,0.07,0.02,0.53,0.18,0.96,0.01,0.00,0.00,0.65,0.01,0.89,0.17,0.01,0.09,0.59,0.12,0.11,0.04,0.02,0.06,0.05,0.49,0.00,0.00,0.02,0.00,0.04,0.72,0.00,0.00,0.01,0.00,0.02,0.49),byrow=TRUE,nrow=4,dimnames=list(c('A','C','G','T')))

freqdf <- as.data.frame(t(freqs))

freqdf$pos = as.numeric(as.character(rownames(freqdf)))

freqdf$height <- apply(freqdf[,c('A', 'C','G','T')], MARGIN=1,
                       FUN=function(x){2-sum(log(x^x,base=2))})

logodf <- data.frame(A=freqdf$A*freqdf$height, C=freqdf$C*freqdf$height,
                     G=freqdf$G*freqdf$height, T=freqdf$T*freqdf$height, 
                     pos=freqdf$pos)

lmf <- melt(logodf, id.var='pos')

quartz(height=3, width=8)

ggplot(data=lmf, aes(x=as.numeric(as.character(pos)), y=value))  +
    geom_bar(aes(fill=variable,order=value), position='stack', 
        stat='identity', alpha=0.5) +
    geom_text(aes(label=variable, size=value, order=value, vjust=value),
        position='stack') +
    theme_bw()

quartz.save('StackOverflow_5438474.png', type='png')

Это создает этот график:

Not bad, but not quite a sequence logo plot

11 голосов
/ 16 сентября 2011

Я реализовал альтернативу, разработанную Чарльзом Берри, которая устраняет некоторые недостатки seqLogos, обсуждаемые до тошноты в разделе комментариев ниже.Он использует ggplot2:

library("devtools")
install_github("leipzig/berrylogo")
library("berrylogo")
freqs<-matrix(data=c(0.25,0.65,0.87,0.92,0.16,0.16,0.04,0.98,0.98,1.00,0.02,0.10,0.10,0.80,0.98,0.91,0.07,0.07,0.11,0.05,0.04,0.00,0.26,0.17,0.00,0.01,0.00,0.00,0.29,0.17,0.01,0.03,0.00,0.00,0.32,0.32,0.53,0.26,0.07,0.02,0.53,0.18,0.96,0.01,0.00,0.00,0.65,0.01,0.89,0.17,0.01,0.09,0.59,0.12,0.11,0.04,0.02,0.06,0.05,0.49,0.00,0.00,0.02,0.00,0.04,0.72,0.00,0.00,0.01,0.00,0.02,0.49),byrow=TRUE,nrow=4,dimnames=list(c('A','C','G','T')))
p<-berrylogo(freqs,gc_content=.41)
print(p)

enter image description here

9 голосов
/ 19 февраля 2017

ggseqlogo должно быть то, что вы ищете. Я надеюсь, что это может облегчить некоторые разочарования, которые, я уверен, многие из вас испытывают, когда дело доходит до нанесения логотипов последовательности в R

4 голосов
/ 22 апреля 2014

На мой взгляд, в ggplot2 нет прямого способа сделать это.

Однако, проверьте RWebLogo. Это оболочка R, которую я написал для библиотеки Python WebLogo. Вы можете загрузить его с CRAN и разместить его на github

Простой пример:

# Load package
library('RWebLogo')

# Sample alignment
aln <- c('CCAACCCAA', 'CCAACCCTA', 'AAAGCCTGA', 'TGAACCGGA')
# Plot logo to file
weblogo(seqs=aln, file.out='logo.pdf')

# Plot logo to R graphics device (uses generated jpeg logo and raster package)
weblogo(seqs=aln, plot=TRUE, open=FALSE, format='jpeg', resolution=600)

Дополнительные параметры см. ?weblogo или ?plotlogo

3 голосов
/ 11 июля 2016

Теперь есть пакет gglogo (также на CRAN, еще одно замечательное расширение ggplot2 от Heike Hofmann).

Этот пакет, который производит такие графики:

library(ggplot2)
library(gglogo)
ggplot(data = ggfortify(sequences, "peptide")) +      
  geom_logo(aes(x=position, y=bits, group=element, 
     label=element, fill=interaction(Polarity, Water)),
     alpha = 0.6)  +
  scale_fill_brewer(palette="Paired") +
  theme(legend.position = "bottom")

enter image description here

Пример взят из https://github.com/heike/gglogo/blob/master/visual_test/logos.R и здесь на упаковке есть рукопись: https://github.com/heike/logopaper/blob/master/logos.Rmd

3 голосов
/ 10 июля 2015

Вот альтернативный вариант. motiflogo - это новое представление логотипа мотива (последовательности), реализованное ggplot2.Можно рассмотреть два аспекта.

  1. Как представление логотипа с каноническим мотивом
  2. Как представление логотипа с привязкой к SNP

a canonical motif logo representation a SNP-specific motif logo representation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...