Подтвердить что ты не робот

Построение "логотипа последовательности" с использованием ggplot2?

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

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

Спасибо.

enter image description here

4b9b3361

Ответ 1

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

Ответ 2

Я внедрил альтернативу, разработанную Чарльзом Берри, в которой рассматриваются некоторые из недостатков seqLogos, обсуждаемых ad nauseam в разделе комментариев ниже. Он использует 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

Ответ 3

Я отправляю попытку 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

Ответ 4

Нет прямого способа сделать это в 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

Ответ 5

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

  • В качестве представления логотипа канонического логотипа
  • Как представление логотипа логотипа SNP

a canonical motif logo representationa SNP-specific motif logo representation

Ответ 6

Теперь есть 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")

введите описание изображения здесь

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

Ответ 7

Я рад, что кто-то наконец сделал это раз и навсегда: https://omarwagih.github.io/ggseqlogo/

Это репозиторий github надстройки ggplot2, чтобы легко создавать логотипы последовательностей. Он также имеет хорошую документацию.