查看原文
其他

R语言绘制分组柱状图示例

生信小白鱼 鲤小白 小白鱼的生统笔记 2022-05-08
ggplot2绘制带误差线以及显著性标记的分组柱状图    简介了堆叠柱状图,顺便再简介一下分组柱状图在R中的绘制。鉴于ggplot2更易于操作,所以本篇主要阐述ggplot2的方法。已知ggplot2柱状图三种样式:geom_col(position = 'stack')、geom_col(position = 'fill')和geom_col(position = 'dodge'),前两种与堆叠样式有关,最后一种(也是默认参数)就是本篇将要介绍的。  

    本文使用的作图数据的网盘链接(提取码 dhta):

    https://pan.baidu.com/s/1q8pcBirz1riG4WWgO3el2w

    某项研究通过16S高通量测序获得了细菌群落物种丰度数据。之后统计了其不同样本分组(group)中,主要细菌类群(taxonomy)的平均相对丰度(mean)以及相对丰度的标准误(se),同时计算了差异显著性(sign1、sign2),最后得到文件“stat.csv”。

    我们期望通过柱状图,可视化统计结果。


ggplot2绘制分组柱状图

  

    我们首先读取数据,将分组柱状图主体轮廓画出来。横坐标细菌类群,纵坐标相对丰度,并按分组列开。

library(ggplot2)

#读取数据
stat <- read.csv('stat.csv', stringsAsFactors = FALSE)

#可以给细菌类群按丰度高低排个序
stat$taxonomy<-factor(stat$taxonomy, levels = c('Alphaproteobacteria', 'Gammaproteobacteria', 'Acidobacteria',
'Actinobacteria', 'Betaproteobacteria', 'Bacteroidetes'))

#将小数类型的相对丰度乘以 100 方便以百分比展示
stat$mean <- stat$mean * 100
stat$se <- stat$se * 100

#ggplot2 分组柱状图
p <- ggplot(stat, aes(taxonomy, mean, fill = group)) +
geom_col(position = position_dodge(width = 0.9), width = 0.7) +
geom_errorbar(aes(ymin = mean - se, ymax = mean + se), width = 0.25, size = 0.3, position = position_dodge(0.9)) +
scale_fill_manual(values = c('#B3DE69', '#FDB462', '#80B1D3')) +
labs(title = NULL, x = NULL, y = 'Relative abundance (%)', fill = NULL) +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = 'black'), legend.position = c(0.9, 0.85)) +
theme(axis.text.x = element_text(size = 11, angle = 45, hjust = 1)) +
scale_y_continuous(expand = c(0, 0), limit = c(0, 50))

#ggsave('p.pdf', p, width = 8, height = 5)
ggsave('p.png', p, width = 8, height = 5)


    然后可以添加显著性标记了,示例数据中提供了两种类型的显著性标记。

    本篇只管作图,不涉及显著性计算。这里的显著性差异都是提前计算好的,已经将差异结果整理表格中了。

#添加显著性标记 abc
p1 <- p + geom_text(aes(label = sign1, y = mean + se + 3), position = position_dodge(0.9))

ggsave('p1.png', p1, width = 8, height = 5)


#添加显著性标记 *
p2 <- p + geom_text(aes(label = sign2, y = mean + se + 6), size = 5)

ggsave('p2.png', p2, width = 8, height = 5)

    最好再拿AI、PS等工具调整下“*”的位置。


    好了,本篇介绍到这里了,不难对不对?



友情链接

  

R语言绘制堆叠面积图

R语言绘制堆叠柱形图

R语言绘制星形图

R语言绘制圆环图

R语言绘制饼图(扇形图)

R语言绘制花瓣图

R语言绘制韦恩图

韦恩图在线绘制网站




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存