ggplot facet_wrap выбранные столбцы data.frame?

У меня есть data.frame X, который содержит координаты точки / образца X1 и X2:

> head(X)
                               X1        X2 Cluster Timepoint Transcripts       MEF       ESC
Drop
NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)
6A_0_TACCTAATCTAC 169.3437 20.18623 2 Day 0 49688 0.4366071 0.3260743 Drop
NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)
6A_0_TCAGCTTGTCAC 155.8880 -16.69927 3 Day 0 47365 0.4554254 0.3350818 Drop
NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)
6A_0_TCGCAATAAGAT 168.4270 36.50967 2 Day 0 44881 0.4114934 0.2595030 Drop
NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)
6A_0_AATCTACCAATC 164.3964 -27.17404 3 Day 0 44640 0.4748225 0.3525822 Drop
NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)
6A_0_GGATTAAGTTCA 162.2900 -24.10504 3 Day 0 36822 0.4723676 0.3391785 Drop
NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)
6A_0_TGATCTAGTGTC 155.4231 -19.18974 3 Day 0 35889 0.4664174 0.3408899

Я хотел бы добавить выбранные маркеры в виде столбцов в X и установить размер точек на точечной диаграмме в соответствии со связанным значением выражения.

NANOG  = t(data['NANOG',rownames(X)])
SAL4 = t(data['SAL4',rownames(X)])
COL5A2 = t(data['COL5A2',rownames(X)])
ESRRB = t(data['ESRRB',rownames(X)])
ELN    = t(data['ELN',rownames(X)])
POU5f1 = t(data['POU5F1',rownames(X)])
PTN    = t(data['PTN',rownames(X)])
CXCL5  = t(data['CXCL5',rownames(X)])
Z = cbind(X, NANOG, SAL4, POU5f1, ESRRB, COL5A2, ELN, PTN, CXCL5)

После привязки этих данных новый data.frame Z выглядит примерно так:

> head(Z)
                               X1        X2 Cluster Timepoint Transcripts       MEF       ESC     NANOG NA POU5F1 ESRRB   COL5A2 ELN      PTN     CXCL5
Drop_6_6A_0_TACCTAATCTAC 169.3437  20.18623       2     Day 0       49688 0.4366071 0.3260743 0.0000000 NA      0     0 5.113106   0 1.004522 0.2645434
Drop_6_6A_0_TCAGCTTGTCAC 155.8880 -16.69927       3     Day 0       47365 0.4554254 0.3350818 0.2763494 NA      0     0 3.068572   0 1.309109 1.0395819
Drop_6_6A_0_TCGCAATAAGAT 168.4270  36.50967       2     Day 0       44881 0.4114934 0.2595030 0.0000000 NA      0     0 5.264248   0 0.000000 0.0000000
Drop_6_6A_0_AATCTACCAATC 164.3964 -27.17404       3     Day 0       44640 0.4748225 0.3525822 0.0000000 NA      0     0 3.554919   0 1.592698 0.2916205
Drop_6_6A_0_GGATTAAGTTCA 162.2900 -24.10504       3     Day 0       36822 0.4723676 0.3391785 0.0000000 NA      0     0 3.838676   0 1.536569 1.9954283
Drop_6_6A_0_TGATCTAGTGTC 155.4231 -19.18974       3     Day 0       35889 0.4664174 0.3408899 0.0000000 NA      0     0 4.029014   0 6.187616 0.0000000

Теперь я могу построить отдельные диаграммы рассеяния с точками, размер которых соответствует соответствующим значениям выражений (показано ниже), но я не уверен, как это сделать на одном графике facet_wrap.

library(gridExtra)
g = arrangeGrob(
  ggplot(Z, aes(X1, X2, color=NANOG)) + ggtitle("NANOG") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='red') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.nanog.expression.no.noise.pdf"), height=pdf_height, width=pdf_width+5),
  ggplot(Z, aes(X1, X2, color=SAL4)) + ggtitle("SAL4") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='red') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.SAL4.expression.no.noise.pdf"), height=pdf_height, width=pdf_width+5),
  ggplot(Z, aes(X1, X2, color=POU5f1)) + ggtitle("POU5F1") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='red') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.pou5f1.expression.pdf"), height=pdf_height, width=pdf_width+5), 
  ggplot(Z, aes(X1, X2, color=ESRRB)) + ggtitle("ESRRB") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='red') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.ESRRB.expression.pdf"), height=pdf_height, width=pdf_width+5), 
  ggplot(Z, aes(X1, X2, color=COL5A2)) + ggtitle("COL5A2") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='green') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.col5a2.expression.pdf"), height=pdf_height, width=pdf_width+5), 
  ggplot(Z, aes(X1, X2, color=ELN)) + ggtitle("ELN") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='green') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.eln.expression.pdf"), height=pdf_height, width=pdf_width+5), 
  ggplot(Z, aes(X1, X2, color=PTN)) + ggtitle("PTN") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='green') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.ptn.expression.pdf"), height=pdf_height, width=pdf_width+5), 
  ggplot(Z, aes(X1, X2, color=CXCL5)) + ggtitle("CXCL5") + 
    geom_point() + 
    xlab(paste0("TSNE1")) + 
    ylab(paste0("TSNE2")) +
    theme_bw() + theme(axis.line = element_line(colour = "black"), panel.grid.minor = element_blank(), panel.background = element_blank()) + scale_colour_gradient(low='light blue', high='green') + 
    ggsave(paste0(outdir, timepoint, ".tsne.",lab,".density.clustered.all.genes.TSNE1.TSNE2.cxcl5.expression.pdf"), height=pdf_height, width=pdf_width+5), 
  nrow=2, ncol=4
)

Приведенный выше код работает так, как ожидалось, но он очень длинный и недостаточен для большого количества, скажем, 100 выбранных маркеров. Я предполагаю, что мне придется как-то расплавить Z data.frame? Любая помощь будет принята с благодарностью.


person user2117258    schedule 09.09.2016    source источник
comment
представьте воспроизводимый пример.   -  person Cyrus Mohammadian    schedule 09.09.2016
comment
Моя запись в блоге может помочь вам с этой проблемой: drsimonj.svbtle.com/ сюжет-некоторые-переменные-против-многих-других   -  person Simon Jackson    schedule 09.09.2016


Ответы (1)


Как предложил OP, один из подходов - расплавить исходный фрейм данных Z:

library(reshape2)
d <- melt(Z, id = 1:5, measure = 6:ncol(Z))

где id может быть вектором целых чисел (индексов столбцов) или строк (имен столбцов) для переменных id, а мера - это вектор, который дает позиции различных мер (в данном случае маркеры). Затем позвоните ggplot:

library(ggplot2)
ggplot(d, aes(x = X1, y = X2, size = value)) +
  geom_point() +
  facet_wrap(~ variable)

добавление этикеток и других украшений по желанию. Вывод с использованием выдержки OP из Z:

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

person Weihuang Wong    schedule 09.09.2016