R сюжет, чтобы показать мутацию

Я новичок в R. Я бы хотел нарисовать фигуры, подобные этой (нижняя левая часть): http://www.nature.com/ng/journal/v45/n8/images_article/ng.2699-F3.jpg,

чтобы показать сосуществование или исключение мутаций (один ген на строку и один образец на столбец). Я не думаю, что это построено на тепловых картах или pheatmap. А вот пример данных (1 для мутации, 0 для дикого типа и NA для недоступных):

data=matrix(sample(c(rep(0,30),rep(1,30)),60),ncol=15)
is.na(data)=c(2,20)

Любые предложения о том, как закончить это? Благодаря ~

1 ответ

Для меня это выглядит как растровая / мозаичная графика. Есть несколько вариантов. Лично я думаю, что ggplot2 пакет делает хорошую работу.

Однако я не использовал предоставленный вами пример, потому что думаю, что данные лучше всего организовать в длинном формате. Посмотрите код ниже для простого примера того, как это сделать:

require(ggplot2)

dat <- expand.grid(gene=1:10, subj=1:50)
dat$mut <- as.factor(sample(c(rep(0,300),rep(1,200)),500))
dat$mut[sample(500,300)] <- NA

ggplot(dat, aes(x=subj, y=gene, fill=mut)) + 
  geom_raster() +
  scale_fill_manual(values = c("#8D1E0B","#323D8D"), na.value="#FFFFFF")

#dev.off()

Визуальный внешний вид можно оптимизировать с помощью ручных весов и функций тематики, предоставляемых ggplot2, Вы можете посмотреть это в документации пакета: http://docs.ggplot2.org/current/

РЕДАКТИРОВАТЬ:

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

ggplot(dat, aes(x=subj, y=gene, fill=mut)) +
  geom_raster() +
  scale_fill_manual(values = c("#8D1E0B","#323D8D"), na.value="#FFFFFF") +
  scale_x_discrete("Subject") +
  scale_y_continuous(breaks=1:10,
    labels=c("D0","D1","D2","D3","D4","D5","D6","D7","D8","D9")) +
  guides(fill=FALSE) +
  theme(
    axis.ticks.x=element_blank(), axis.ticks.y=element_blank(),
    axis.text.x=element_blank(), axis.text.y=element_text(colour="#000000"), 
    axis.title.x=element_text(face="bold"), axis.title.y=element_blank(),
    panel.grid.major.x=element_blank(), panel.grid.major.y=element_blank(),
    panel.grid.minor.x=element_blank(), panel.grid.minor.y=element_blank(), 
    panel.background=element_rect(fill="#ffffff")
  )

#dev.off()

Тем не менее, загляните в документацию ggplot2 Это очень полезно для разработки вашей графики и ее адаптации к вашим потребностям.

Другие вопросы по тегам