R语言叠状图

# 绘图包、数据清洗、表格宽转长
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值