R语言 | 绘制饼图(扇形图)方法示例
R语言绘制饼图(扇形图)
饼图(或扇形图)是最基本的统计图形之一,用于展示各元素数值相对于总数的占比情况,图中每个扇区的弧长表示该元素数值的占比大小(总和为1)。今天呢白鱼小编就给大家带来如何使用R语言绘制饼图的方法。
本文使用的作图数据的网盘链接(提取码7sjx):
https://pan.baidu.com/s/1opiw6gHgUGfBgsRnmo93yA
文件“phylum.txt”由16S高通量测序所得的物种丰度表转化而来,展示了主要细菌类别(行)在各样本(列)中的丰度信息。接下来我们绘制饼图,展示主要细菌类别在样本中的丰度占比信息。
pie()绘制饼图
在R中读入数据后,可直接使用pie()绘制饼图,该命令在R启动时默认加载。
我们使用pie()绘制样本a1中主要细菌类别的丰度组成,一个简单的作图命令如下所示。
#读取数据
phylum <- read.delim('phylum.txt', sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)
#pie(),可使用 ?pie 查看该命令详情
pie(phylum$a1, col = c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462'),
labels = phylum$phylum, font = 3, main = 'Sample: a1\nPhylum level')
pie3D()绘制3D饼图
plotrix包中提供了一个可绘制3D效果饼图的命令pie3D()。我们继续使用以上读入的测试数据,加载plotrix包绘制3D饼图。
#pie3D(),可使用 ?pie3D 查看该命令详情
library(plotrix)
pie3D(phylum$a1, col = c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462'),
explode = 0.05, height = 0.1, radius = 0.85, labels = phylum$phylum, labelcex = 1, main = 'Sample: a1\nPhylum level')
fan.plot()叠加扇形图
plotrix包中还提供了一个可用于绘制叠加扇形图的命令fan.plot()。我们继续使用以上读入的测试数据,加载plotrix包绘制叠加扇形图。
#fan.plot(),可使用 ?fan.plot 查看该命令详情
library(plotrix)
fan.plot(phylum$a1, col = c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462'),
labels = phylum$phylum, main = 'Sample: a1\nPhylum level')
注意:这里扇形的宽度才是重要的,而半径大小并无意义。
ggplot2绘制饼图
ggplot2功能强大,因此使用ggplot2绘制饼图是个很不错的选择。白鱼小编就很喜欢ggplot2的语法和风格,更灵活且更好看。
#ggplot2
library(ggplot2)
p <- ggplot(phylum, aes(x = '', y = a1, fill = phylum)) +
geom_bar(stat = 'identity', width = 1) +
coord_polar(theta = 'y') +
scale_fill_manual(values = rev(c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462'))) +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text.x = element_blank(), plot.title = element_text(hjust = 0.5)) +
theme(legend.text = element_text(face = 'italic'), legend.title = element_blank()) +
labs(x = '', y = '', title = 'Sample: a1', fill = 'Phylum')
p
再来个圆环状的样式。
p <- ggplot(phylum, aes(x = '', y = a1, fill = phylum)) +
geom_bar(stat = 'identity', width = 0.3) +
coord_polar(theta = 'y') +
scale_fill_manual(values = rev(c('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462'))) +
theme(panel.grid = element_blank(), panel.background = element_blank(), axis.text.x = element_blank(), plot.title = element_text(hjust = 0.5)) +
theme(legend.text = element_text(face = 'italic'), legend.title = element_blank()) +
labs(x = '', y = '', title = 'Sample: a1', fill = 'Phylum')
p
好了,基本图形的画法就先简介到这里吧。多多练习,慢慢熟练了窍门后尝试挑战更复杂的图形吧。