Можно ли (разумно) построить график , используя ggplot2?
Существует пакет, который основан на "сетке", называемой " seqLogo", но мне было интересно, если можно это версия ggplot2.
Спасибо.
Можно ли (разумно) построить график , используя ggplot2?
Существует пакет, который основан на "сетке", называемой " seqLogo", но мне было интересно, если можно это версия ggplot2.
Спасибо.
ggseqlogo должен быть тем, что вы ищете. Я надеюсь, что это может облегчить некоторые из разочарования. Я уверен, что многие из вас имеют дело с построением логотипов последовательностей в R
Я внедрил альтернативу, разработанную Чарльзом Берри, в которой рассматриваются некоторые из недостатков 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)
Я отправляю попытку 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')
Создает этот график:
Нет прямого способа сделать это в 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
Вот альтернативный вариант. motiflogo - новое представление логотипа motif (sequence), реализованного ggplot2. Можно рассмотреть два аспекта.
Теперь есть 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
Я рад, что кто-то наконец сделал это раз и навсегда: https://omarwagih.github.io/ggseqlogo/
Это репозиторий github надстройки ggplot2, чтобы легко создавать логотипы последовательностей. Он также имеет хорошую документацию.