我正在尝试使用R制作堆叠的条形图 . 主要的关键点是使用图中颜色列的颜色 .
情节要求:
-
每个条形(x轴)应代表一个时间 .
-
每个物种应该是适当的颜色(由颜色栏给出),其在条形图上的空间反映丰度(y轴) .
-
在每个酒吧内,同一门的物种应该组合在一起 .
-
设置条的宽度真的很酷,但不是必需的 .
数据集的特征:
-
每个物种都有一种单独的颜色,物种的颜色由它们的门进行渐变 .
-
一段时间内物种的丰度总和为100 .
-
并非每个物种都在每一次
-
有7次,8门,132种
关于如何表示这些数据的其他想法是受欢迎的 .
代表数据:
phyla species abundance color time
Actinobacteria Bifidobacterium_adolescentis 18.73529 #F7FBFF D30
Firmicutes Faecalibacterium_prausnitzii 14.118 #F7FCF5 D30
Firmicutes Catenibacterium_mitsuokai 12.51944 #F3F9F2 D30
Bacteroidetes Bacteroides_ovatus 7.52241 #FFF5EB D30
Firmicutes Faecalibacterium_prausnitzii 21.11866 #F7FCF5 D7
Firmicutes Ruminococcus_sp_5_1_39BFAA 13.54397 #92B09C D7
Actinobacteria Bifidobacterium_adolescentis 10.21989 #F7FBFF D7
Actinobacteria Bifidobacterium_adolescentis 38.17028 #F7FBFF D90
Firmicutes Catenibacterium_mitsuokai 11.04982 #F3F9F2 D90
Firmicutes Faecalibacterium_prausnitzii 9.82507 #F7FCF5 D90
Actinobacteria Collinsella_aerofaciens 5.2334 #D4DEE9 D90
先感谢您;我正用这个把头撞在墙上 .
代码感谢罗伯特 .
#reshape the dataframes as matrices
#species are row names and times are columns (abundance data makes up matrix)
#put the matrix times in the correct order
#create stacked barplot that has the width of column reflecting shannon index
#save the stacked barplots in files named by the entry list
for(i in 1:n){
phyl=aggregate(abundance ~ phyla+species+color+time, dfs[[i]], sum)
phyl=phyl[with(phyl,order(phyla,species,time)),]
wide <- reshape(phyl, idvar = c("phyla","species","color"),
timevar = "time", direction = "wide")
wide[is.na(wide)]<-0
wide
res1=as.matrix(wide[,-c(1:3)],ncol=dim(wide[,-c(1:3)])[2])
colnames(res1)=
unlist(strsplit(colnames(res1), ".", fixed = TRUE)) [seq(2,length(colnames(res1))*2,by=2)]
rownames(res1)=wide$species
res1 <- res1[,c('E','FMT','PA','PF','D7','D30','D90')]
bar.width <- as.matrix(div.dfs[[i]]['frac'])
mypath <- file.path(output.path,paste(project.name, "_", lhs[i], ".tiff", sep = ""))
tiff(file=mypath)
mytitle = paste(project.name, lhs[i])
barplot(res1,col=wide$color,beside = F, width = c(bar.width), main = mytitle, legend.text=F,args.legend=
list(x = "top",bty="n",cex=.6,ncol=2))
dev.off()
rm(res1)
}
#makes the legend and exports as a eps file
setwd(output.path)
plot_colors <- database$color
text <- database$species
SetEPS()
postscript('legend.eps')
plot.new()
par(xpd=TRUE)
legend("center",legend = text, text.width = max(sapply(text, strwidth)),
col=plot_colors, lwd=1, cex=.2, horiz = F, ncol=2, bty='n')
par(xpd=FALSE)
dev.off()
1 回答
这是没有门的
这是考虑门的方法