40 Stimmen

Plotten eines "Sequenzlogos" mit ggplot2?

Ist es (einigermaßen) möglich, eine Sequenzlogo-Plot ggplot2 verwenden?

Dafür gibt es ein Paket, das auf "Grid" basiert und " seqLogo ", aber ich habe mich gefragt, ob es eine ggplot2-Version davon geben könnte.

Gracias.

enter image description here

14voto

Omar Wagih Punkte 8082

ggseqlogo sollte das sein, wonach Sie suchen. Ich hoffe, dass dies einige der Frustrationen lindern kann, die sicher viele von Ihnen haben, wenn es um das Plotten von Sequenzlogos in R geht

12voto

Curt F. Punkte 4492

Ich reiche eine ggplot2 Versuch, der der obigen Lösung von Leipzig/Berry ähnlich ist. Dieses Format ist ein kleines bisschen näher am Standardlogogramm.

Aber meine Lösung, und ich denke jede ggplot2 Lösung, immer noch zu kurz kommt, weil ggplot2 bietet keine Kontrolle über das Seitenverhältnis von Plottsymbolen . Dies ist die wichtigste Fähigkeit, die (meiner Meinung nach) für die Erstellung von Sequenzlogos erforderlich ist und die in ggplot2 .

Anmerkung: Ich habe die Daten aus Jeremy Leipzigs Antwort aber ich habe keine Korrekturen für kleine Stichprobengrößen oder für %GC-Werte von mehr als 50 % vorgenommen.

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')

Daraus ergibt sich dieses Diagramm:

Not bad, but not quite a sequence logo plot

10voto

Jeremy Leipzig Punkte 1853

Ich habe eine von Charles Berry entwickelte Alternative implementiert, die einige der Schwächen von seqLogos behebt, die im Kommentarbereich unten bis zum Überdruss diskutiert werden. Es verwendet 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

4voto

Omar Wagih Punkte 8082

Keine direkte Möglichkeit, dies in ggplot2 zu tun, soweit ich betroffen bin.

Aber sehen Sie sich RWebLogo an. Es ist ein R-Wrapper, den ich für die WebLogo-Python-Bibliothek geschrieben habe. Sie können es herunterladen von CRAN und es wird gehostet auf github

Einfaches Beispiel:

# 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)

Für weitere Optionen siehe ?weblogo o ?plotlogo

3voto

Zhilong Jia Punkte 2227

Hier ist eine alternative Möglichkeit. Motivlogo ist eine neue Darstellung des Motiv-(Sequenz-)Logos, die von ggplot2 implementiert wurde. Dabei können zwei Aspekte berücksichtigt werden.

  1. Als kanonische Motiv-Logo-Darstellung
  2. Als SNP-spezifisches Motiv Logo-Darstellung

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X