# 绘图包、数据清洗、表格宽转长
library(ggplot2)
library(tidyverse)
library(reshape2)
# 读生一个测试数据宽表格
df=data.frame(
Phylum=c("Ruminococcaceae","Bacteroidaceae","Eubacteriaceae","Lachnospiraceae","Porphyromonadaceae"),
GroupA=c(37.7397,31.34317,222.08827,5.08956,3.7393),
GroupB=c(113.2191,94.02951,66.26481,15.26868,11.2179),
GroupC=c(113.2191,94.02951,66.26481,15.26868,11.2179)
)
# melt转换为长表格为ggplot2绘图通用格式
# geom_segment添加直线和曲线
#arrange按门水平名称字母降序排列;cumsum先将数值累计,再用mutate取代;现在己有两组间的高度位置,再设置X轴位置1.25, 1.75, 和Y位置
#stat:设置统计方法,有效值是count(默认值) 和 identity,其中,count表示条形的高度是变量的数量,identity表示条形的高度是变量的值;
#position:位置调整,有效值是stack、dodge不堆叠,默认值是stack(堆叠),是指两个条形图堆叠摆放,dodge是指两个条形图并行摆放,fill是指按照比例来堆叠条形图,每个条形图的高度都相等,但是高度表示的数量是不尽相同的。
#width:条形图的宽度,是个比值,默认值是0.9,color:条形图的线条颜色,fill:条形图的填充色
ggplot(melt(df), aes(x=variable, y=value, fill=Phylum)) +
geom_bar(stat = "identity", position="stack",width=0.5, col='black') +
geom_segment(data=df %>% arrange(by=desc(Phylum)) %>%
mutate(GroupA=cumsum(GroupA)) %>% mutate(GroupB=cumsum(GroupB)),
aes(x=1.25, xend=1.75, y=GroupA,yend=GroupB)
)+
geom_segment(data=df %>% arrange(by=desc(Phylum)) %>%
mutate(GroupB=cumsum(GroupB)) %>% mutate(GroupC=cumsum(GroupC)),
aes(x=2.25, xend=2.75, y=GroupB,yend=GroupC))+
#去除背景颜色及多余网格线
theme_bw() + theme(panel.grid=element_blank()
)
# 添加theme_classic()修改主题样式,这个经典主题我更喜欢
# x和xend分别为起始和终止,1,2组间X值起始分别为1.25和1.75,2,3组间则为2.25和2.75
R语言叠状图
最新推荐文章于 2023-09-25 12:20:42 发布