У меня есть список дифференциально экспрессируемых генов в объекте с именем edger_res
(уже упорядоченный для наиболее значимых вверху) и необработанные подсчеты в gene_cts
(отсортированные в алфавитном порядке).
нужно сделать так, чтобы первые 5 экспрессируемых генов поднялись вверх и 5 вниз, на одном графике (или фасете ... не возражаете). Но у меня ничего не получается.
Примеры объектов данных:
> head(edger_res)
logFC logCPM F PValue FDR
PHF21A -5.482006 7.952084 26.62146 2.477049e-07 0.005186941
LOC101119317 -6.156996 6.268149 18.31106 1.876978e-05 0.196519644
SLC6A11 -5.163764 6.888840 17.33798 3.129958e-05 0.199922391
TTLL5 -5.796932 6.029176 16.30225 5.401907e-05 0.199922391
CORO6 -5.797556 6.024060 16.26880 5.498098e-05 0.199922391
CAPG 5.833208 6.039094 15.89117 6.711370e-05 0.199922391
> head(gene_cts)
BC01 BC02 BC03 BC04 BC08 BC11 BC05 BC06 BC07 BC09 BC10 BC12
A1BG 0 0 0 0 1 0 0 0 0 0 0 0
A1CF 0 0 0 0 1 0 1 1 0 0 0 0
A2ML1 0 0 8 0 0 0 4 4 0 0 0 1
A3GALT2 0 0 0 0 1 0 0 0 0 0 0 1
A4GALT 0 0 0 0 0 0 0 1 0 0 0 0
A4GNT 20 13 49 12 16 23 79 65 9 7 12 8
Вот где у меня пока что:
# Filter up/down regulated genes
UpReg <- edger_res[which(edger_res$logFC>1),]
UpReg <- row.names(UpReg[1:5,])
UpRegGenes <- gene_cts[which(row.names(gene_cts)%in%UpReg),]
DownReg <- edger_res[which(edger_res$logFC<1),]
DownReg <- row.names(DownReg[1:5,])
DownRegGenes <- gene_cts[which(row.names(gene_cts)%in%DownReg),]
# bind and transpose
UpDownGenes <- rbind(DownRegGenes, UpRegGenes)
UpDownGenes <- t(UpDownGenes)
# make numeric
for (i in 1:12) {
UpDownGenes[i,] <- as.numeric(UpDownGenes[i,])
}
Что дает
UpDownGenes
CORO6 LOC101119317 PHF21A SLC6A11 TTLL5 CAPG CXHXorf23 EPHA7 SLC4A10 UAP1
BC01 1 10 0 90 25 0 0 0 0 0
BC02 0 0 58 0 1 0 0 0 0 0
BC03 1 18 86 0 15 0 0 0 0 0
BC04 8 0 0 0 1 0 0 0 0 0
BC08 28 16 30 1 0 0 0 0 0 0
BC11 0 8 42 0 0 0 0 0 0 0
BC05 0 0 0 1 0 0 14 20 0 13
BC06 0 0 0 0 0 0 17 16 23 0
BC07 0 0 0 1 0 8 0 1 0 4
BC09 0 0 3 0 0 0 0 1 0 12
BC10 0 0 0 0 0 1 0 4 16 7
BC12 0 0 1 0 0 24 14 0 1 0
Но когда я пытаюсь построить график, используя это:
UpDownPlot <-
ggplot(data = UpDownGenes, aes(x=colnames(UpDownGenes))) +
geom_boxplot(fill = studyDesign$group) +
ggtitle("Top 5 Up and 5 Down Differentially Expressed Genes") +
xlab("Gene") +ylab("normalised read count") +
theme_bw() +
theme(legend.position = "none")
print(UpDownPlot)
, я получаю следующее:
Error: `data` must be a data frame, or other object coercible by `fortify()`, not a numeric vector
Я пробовал сделать UpDownGene
как df, используя UpDownGenes <- as.data.frame(UpDownGenes)
вместо этого, но он дал
Error: Aesthetics must be either length 1 or the same as the data (12): x