vlambda博客
学习文章列表

R语言 | 绘制环图示例



ggplot2绘制圆环图示例




    圆环图嘛,当然就是圆环状的统计图啦。它主要由柱形图或饼图转化而来,将原本一个个竖直的柱子弯曲成圆环展示,或者将饼图转换为空心状圆环。本篇白鱼小编将使用R语言ggplot2包,通过几个示例分享这类圆环图的绘制方法。


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

    https://pan.baidu.com/s/1vgxkVnOw-nv5TphMdZiooA

    文件“phylum_top10.txt”由16S高通量测序所得的物种丰度表转化而来,展示了主要细菌类别(行)在各样本(列)中的丰度信息。我们将通过圆环图,展示各样本中各细菌类别的丰度组成。


ggplot2绘制圆环图

  

    首先对示例数据作个预处理,包括按数值高低排个序,以及选取特定作图子集等。

library(reshape2)

#读取数据,按总丰度大小排序,并重排为便于 ggplot2 识别的样式
phylum <- read.delim('phylum_top10.txt', sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)
phylum <- phylum[order(rowSums(phylum[-1])), ]
phylum$Taxonomy <- factor(phylum$Taxonomy, levels = c('Others', as.vector(phylum$Taxonomy[-which(phylum$Taxonomy == 'Others')])))
time_all <- melt(phylum, id = 'Taxonomy')

#挑选其中的一个样本子集,并按丰度大小排序
time1 <- subset(time_all, variable == 'time1')
time1 <- time1[order(time1$value), ]
time1$Taxonomy <- factor(time1$Taxonomy, levels = c('Others', as.vector(time1$Taxonomy[-which(time1$Taxonomy == 'Others')])))


    接下来加载ggplot2绘制圆环图,以下简要展示几个示例。

    使用只包含一个样本的细菌丰度数据子集“time1”,绘制圆环图,展示该样本中各细菌类别丰度组成。

#加载 ggplot2
library(ggplot2)

##以 time1 为例作图展示
#先得到柱形图
p <- ggplot(time1, aes(x = Taxonomy, y = value, fill = Taxonomy)) +
geom_bar(stat = 'identity', width = 1) +
scale_fill_manual(values = c('gray', '#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5')) +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text = element_blank(), axis.ticks = element_blank(), plot.title = element_text(hjust = 0.5)) +
labs(x = '', y = '', title = 'Time1', fill = 'Top10 Phylum')

#再经坐标系变换得到圆环图
p + coord_polar(theta = 'y')

R语言 | 绘制环图示例


    使用包含所有样本的作图数据 “time_all”,绘制圆环图,展示所有样本(示例数据中共计5个样本)中各细菌类别的丰度组成水平,方便比较查看。

##以 time_all 为例
#先得到柱形图
p <- ggplot(time_all, aes(variable, value, fill = Taxonomy)) +
geom_bar(stat = 'identity', width = 0.8) +
scale_fill_manual(values = c('gray', '#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5')) +
labs(x = '', y = '', fill = 'Top10 Phylum') +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text.x = element_blank())

#再经坐标系变换得到圆环图
p + coord_polar(theta = 'y')

R语言 | 绘制环图示例


    在前文“R语言绘制饼图(扇形图)”中,已经展示了在ggplot2中如何将实心的饼图绘制为空心的“饼环”样式。其实对于此时的“饼环”,我们也可将其视为一种圆环图。

##绘制饼图时,若展示为空心的“饼环”样式,则也可视为一种圆环图,以 time1 为例作图展示
#饼图
p1 <- ggplot(time1, aes(x = '', y = value, fill = Taxonomy)) +
geom_bar(stat = 'identity', width = 1) +
coord_polar(theta = 'y') +
scale_fill_manual(values = c('gray', '#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5')) +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text.x = element_blank(), plot.title = element_text(hjust = 0.5)) +
labs(x = '', y = '', title = 'Time1', fill = 'Top10 Phylum')

p1

#可通过设置 geom_bar() 中 width 参数的大小(小于 1 即可,数值越小空心面积越大)后,转化为饼图后即可得到圆环图
p2 <- ggplot(time1, aes(x = '', y = value, fill = Taxonomy)) +
geom_bar(stat = 'identity', width = 0.3) +
coord_polar(theta = 'y') +
scale_fill_manual(values = c('gray', '#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#BC80BD', '#CCEBC5')) +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text.x = element_blank(), plot.title = element_text(hjust = 0.5)) +
labs(x = '', y = '', title = 'Time1', fill = 'Top10 Phylum')

p2


    好了,本篇关于ggplot2绘制圆环图就先介绍到这里了,大家get到技巧了吗?


我就知道你在看