从数据过滤到图形绘制,通过ggplot2绘制一个美观的堆砌条形图 关注公众号R语言数据分析指南后台回复bar获得实例数据及代码,废话不多说直接看代码
持续分享R中一些优质的资源
rm(list=ls())
pacman::p_load(tidyverse,reshape,RColorBrewer)
colors <-c("#E41A1C","#1E90FF","#FF8C00","#4DAF4A","#984EA3",
"#40E0D0","#FFC0CB","#00BFFF","#FFDEAD","#90EE90",
"#EE82EE","#00FFFF","#F0A3FF", "#0075DC",
"#993F00","#4C005C","#2BCE48","#FFCC99",
"#808080","#94FFB5","#8F7C00","#9DCC00",
"#426600","#FF0010","#5EF1F2","#00998F",
"#740AFF","#990000","#FFFF00")
a1 <- read.delim("data.xls",header = T,row.names = 1,
check.names = F,sep="\t") %>%
mutate(sum= rowSums(.),ID=row.names(.),
persent = sum/sum(sum)*100,sum=NULL) %>%
filter(persent >=1) %>%
melt() %>% filter(variable !="persent")
上述代码定义一套常用的色系,建议收藏
-
sum= rowSums(.) 按行求和 -
ID=row.names(.) 将行名添加至数据框中 -
persent = sum/sum(sum)*100 按行计算百分比 -
filter(persent >=1) 过滤掉占比小于1%的行 -
melt() 宽表转长表 -
filter(variable !="persent") 剔除含有persent的行
a2 <- "group.xls" %>% read.delim()
a4 <- NULL
for (i in seq_len(nrow(a1))) {
a4[i] <- a2[which(a2[, 1] == a1[i, 2]),2] }
a1[,4] <- a4
head(a1)
ID variable value V4
1 Subgroup 6 A1 997 A_K1
2 Nocardioides A1 573 A_K1
3 Sphingomonas A1 238 A_K1
4 Bacillus A1 377 A_K1
5 Gemmatimonadaceae_uncultured A1 296 A_K1
6 Rokubacteriales A1 234 A_K1
将数据与分组文件整合
ggplot(a1,aes(variable,value,fill=ID))+
geom_bar(stat="identity",position = "fill")+
facet_grid(.~ V4,scales = "free",space="free_x")+
labs(x="",y="Proportions")+
scale_fill_manual(values =colors)+labs(fill="")+
theme(legend.title=element_blank())+
scale_y_continuous(expand=c(0,0))+theme_bw()

一张美观的堆砌条形图就这么诞生了

