猪RNA-seq绘图技巧生信绘图

利用ggplot2绘制条形图-Barplot(并排+堆积+填充)

2020-10-25  本文已影响0人  shenghuanjing

条形图简介

在SCI论文的数据图表中,作者习惯于用条形图来表示分类数据的分布特征。在ggplot2中,条柱对应的几何对象函数为geom_bar(), 它的功能就是展示计数数据,即每种分类水平一共有多少个观测值。

条形图示例

条形图分类

在ggplot2中,通常使用的条柱排列方式有三种,并排式(dodge)、堆栈式(stack)和填充式(fill)。
并排式:内部不同水平的大小比较
堆栈式:横向比较
填充式:纵向比较

使用条形图注意事项

•不要将条形图和直方图混淆,直方图仅反映数值型变量及其分布。
•对条形图的柱子进行排序!
•如果一个分组有多个观测值,不要使用条形图。即使带有error bars,它会隐藏数据分布的很多信息,这时候考虑箱线图或小提琴更合适。

绘图代码

绘图的背景数据来自于生信小白鱼的R语言绘制分组柱状图示例(链接在文末)。

library(ggplot2)
library(cowplot)
library(RColorBrewer)

#读取数据
stat <- read.csv('stat.csv', stringsAsFactors = FALSE)
head(stat)
#  group            taxonomy       mean          se sign1 sign2
#1    t2       Acidobacteria 0.07900818 0.014288334     a      
#2    t2      Actinobacteria 0.09357735 0.010600036            
#3    t2 Alphaproteobacteria 0.23973385 0.013647304     c      
#4    t2       Bacteroidetes 0.06632490 0.007760726     a      
#5    t2  Betaproteobacteria 0.08499788 0.006444345     a      
#6    t2 Gammaproteobacteria 0.25456864 0.034769642     a   
#可以给细菌类群按丰度高低排个序
stat$taxonomy<-factor(stat$taxonomy, levels = c('Alphaproteobacteria', 'Gammaproteobacteria', 'Actinobacteria', 'Acidobacteria', 'Betaproteobacteria', 'Bacteroidetes'))

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

#利用geom_bar()绘制并排式条形图——'dodge'
p1 <- ggplot(stat, aes(taxonomy, weight = mean, fill = group)) +
  geom_hline(yintercept = seq(10, 50, 10), color = 'gray') +
  geom_bar(color = "black", width = .7, position = 'dodge') +
  geom_errorbar(aes(ymin = mean - se, ymax = mean + se), width = 0.25, size = 0.3, position = position_dodge(0.7)) +
  labs( y = 'Relative abundance (%)') +
  scale_fill_brewer(palette = "Set3")+
  scale_y_continuous(expand = c(0,0)) +
  theme_classic()

#利用geom_bar()绘制堆栈式条形图——'stack'
p2 <- ggplot(stat, aes
(taxonomy, weight = mean, fill = group)) +
  geom_hline(yintercept = seq(25, 100, 25), color = 'gray') +
  geom_bar(color = "black", width = .7, position = 'stack') +
  labs( y = 'Relative abundance (%)') +
  scale_fill_brewer(palette = "Set3")+
  scale_y_continuous(expand = c(0,0)) +
  theme_classic()

#利用geom_bar()绘制填充式条形图——'fill'
p3 <- ggplot(stat, aes(group, weight = mean, fill = taxonomy)) +
  geom_bar(color = "black", width = .7, position = 'fill') +
  labs( y = 'Relative abundance (%)') +
  scale_fill_brewer(palette = "Set3")+
  scale_y_continuous(expand = c(0,0)) +
  theme_classic()

plot_grid(p1, p2, p3, nrow = 3, labels = letters[1:3], align = c("v", "h"))

结果如图所示


结果示例

参考链接

生信小白鱼的R语言绘制分组柱状图示例

上一篇下一篇

猜你喜欢

热点阅读