Я занимаюсь биоинформатикой, и мне нужно вывести график (barplot) с результатами родословной. Как правило, эти графики рисуются путем группировки популяций вместе. То, как это делается, состоит в том, что вы просто строите штрих-код оценки Q (данные ниже) для разных предполагаемых групп населения (здесь 4).Как «группировать» данные заказа в R для штрих-кода?
Проблема в том, что я использую ord = tbl[order(tbl$V1,tbl$V2,tbl$V3),]
для сортировки значений. Таким образом, я вижу, что некоторые бары не группируются в нужную группу (см. Оранжевую полосу на графике, которая должна группироваться с первой группой). Таким образом, я хотел бы знать, как можно было бы группировать столбцы по цвету (который представляет собой совокупность).
Есть ли способ решить эту проблему?
barplotgeno <- function(tbl, # To plot the Q scores (ancestry).
col = c("#FF3030", # nice colors
"#9ACD31",
"#1D90FF",
"#FF8001"),
pdf = TRUE,
pdf.path.name = "~/Desktop/Stacked_barplot.pdf") {
ord = tbl[order(tbl$V1,tbl$V2,tbl$V3),]
if(pdf) {
pdf(pdf.path.name, width = 11, height = 8.5)
bp = barplot(t(as.matrix(ord[,1:dim(ord)[2]-1])),
space = c(0.2),#space = c(0),# Space between the bars
col=col, #rainbow(4),
xlab="Individual #",
ylab="Ancestry", xaxt="n",
border=NA, main = "Stacked barplot from ADMIXTURE analysis")
labs <- row.names(ord)
text(cex=0.5, x=bp+1, y=-0.03, labs, xpd=TRUE, srt=90, pos=2)
dev.off()
} else {
bp = barplot(t(as.matrix(ord[,1:dim(ord)[2]])),
space = c(0.2),
col=col,
xlab="Individual #",
ylab="Ancestry", xaxt="n",
border=NA,
main = "Stacked barplot from ADMIXTURE analysis")
labs <- row.names(ord)
text(cex=0.5, x=bp+1, y=-0.03, labs, xpd=TRUE, srt=90, pos=2)
}
}
# Example
barplotgeno(tbl = tbl, pdf = FALSE)
Вот данные:
tbl = structure(list(V1 = c(1e-05, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.430202, 0.99997,
0.801974, 1e-05, 0.99997, 0.99997, 1e-05, 0.999968, 1e-05, 1e-05,
1.3e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.99997, 1e-05, 1.8e-05,
1e-05, 1.2e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1.1e-05, 1e-05, 0.642925,
1e-05, 0.99997, 0.99997, 1e-05, 1e-05, 0.99997, 1e-05, 0.99997,
0.99997, 0.287976, 1e-05, 0.99997, 0.99997, 0.99997, 1e-05, 0.533994,
0.99997, 0.99997, 1e-05, 0.99997, 1e-05, 0.99997, 1e-05, 1e-05,
0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 0.307669, 0.99997,
0.604114, 0.604792, 0.29646, 0.514252, 0.99997, 0.798616, 0.516577,
1e-05, 1e-05, 1e-05, 1e-05, 0.449886, 1e-05, 1e-05, 1e-05, 1e-05,
0.790272, 1e-05, 0.576786, 0.776731), V2 = c(0.99997, 1e-05,
1e-05, 1e-05, 0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 0.99997,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1.2e-05, 0.99997, 1e-05, 1e-05, 1e-05, 0.99997, 1e-05,
0.99997, 0.99997, 1e-05, 1e-05, 0.528138, 0.99997, 1e-05, 1e-05,
1e-05, 1e-05, 0.99997, 1e-05, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.712004, 0.99997,
1e-05, 1e-05, 1e-05, 0.99997, 0.465986, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.99997, 0.99997,
0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.05777,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.591857, 0.99997, 1e-05,
0.99997, 0.99997, 0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05
), V3 = c(1e-05, 1e-05, 1e-05, 0.541112, 1e-05, 1e-05, 0.329922,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.198006,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.999967, 0.451508,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.749225,
1e-05, 0.99997, 0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 0.442211,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.188,
1e-05, 0.248756, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 1e-05, 0.395866, 0.395188, 0.293429, 0.427968,
1e-05, 0.201364, 0.483403, 1e-05, 1e-05, 0.408123, 1e-05, 0.550094,
1e-05, 1e-05, 1e-05, 1e-05, 0.209708, 0.533729, 0.423194, 0.223249
), V4 = c(1e-05, 1e-05, 0.99997, 0.458868, 1e-05, 1e-05, 0.670058,
0.99997, 0.99997, 1e-05, 1e-05, 0.99997, 0.99997, 0.569778, 1e-05,
1e-05, 0.99997, 1e-05, 1e-05, 0.99997, 1e-05, 1e-05, 0.99997,
1e-05, 0.548472, 1e-05, 0.99997, 1e-05, 1e-05, 1e-05, 0.99997,
0.471833, 1e-05, 0.250753, 0.99997, 1e-05, 1e-05, 1e-05, 0.999969,
1e-05, 0.357055, 0.557769, 1e-05, 1e-05, 0.99997, 0.99997, 1e-05,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
1e-05, 1e-05, 1e-05, 0.81198, 1e-05, 0.751224, 1e-05, 0.99997,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 0.692311,
1e-05, 1e-05, 1e-05, 0.410101, 1e-05, 1e-05, 1e-05, 1e-05, 0.99997,
0.99997, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05, 1e-05,
0.466251, 1e-05, 1e-05)), .Names = c("V1", "V2", "V3", "V4"), class = "data.frame", row.names = c(NA,
-93L))
Если вам нужна группировка переменной здесь один (в порядке данных):
species = c("fuliginosa", "fuliginosa", "fuliginosa", "fuliginosa", "fuliginosa",
"fuliginosa", "fuliginosa", "fuliginosa", "fuliginosa", "fortis",
"fuliginosa", "fuliginosa", "fortis", "fortis", "fortis", "fuliginosa",
"fuliginosa", "fortis", "scandens", "fortis", "fortis", "scandens",
"scandens", "fuliginosa", "magnirostris", "scandens", "magnirostris",
"fortis", "fortis", "fortis", "fortis", "fortis", "scandens",
"fortis", "scandens", "scandens", "magnirostris", "fortis", "fortis",
"fortis", "scandens", "magnirostris", "magnirostris", "fortis",
"fortis", "fortis", "fortis", "magnirostris", "fortis", "magnirostris",
"magnirostris", "magnirostris", "fortis", "fortis", "fortis",
"magnirostris", "magnirostris", "fortis", "fortis", "fortis",
"fortis", "fortis", "fortis", "fortis", "fortis", "fortis", "fortis",
"magnirostris", "fortis", "fortis", "fortis", "fortis", "fortis",
"fortis", "fortis", "fortis", "fortis", "fortis", "fuliginosa",
"fortis", "fortis", "fortis", "fortis", "fuliginosa", "fuliginosa",
"fuliginosa", "fuliginosa", "fortis", "fortis", "fortis", "fortis",
"fortis", "fortis")
Я предполагаю, что вы делаете, это назначить вероятность того ближайшего соседа, а затем сортировки в порядке убывания (скорее всего, менее всего вероятно). Я прав? –
«назначьте вероятность быть ближайшим соседом», не уверен, что вы подразумеваете под этим. Я просто назначаю каждому индивидууму их наиболее вероятное население и сортирую его первым. (И затем сортируйте по вероятности, как вы отметили.) – Axeman
Возможно, есть некоторые возможности для улучшения, также сортируя по 2-й и 3-й наиболее вероятные популяции. – Axeman