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.
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.
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
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:
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)
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
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.
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.