饼图在平时生活中很常见,但是在科研中,相对于饼图,他们更推荐使用条形图或点图,因为相对于面积,人们对长度的判断更精确。也许由于这个原因,R中饼图的选项与其他统计软件相比十分有限。
1. 简单饼图
pie(x, labels = names(x), edges = 200, radius = 0.8,
clockwise = FALSE, init.angle = if(clockwise) 90 else 0,
density = NULL, angle = 45, col = NULL, border = NULL,
lty = NULL, main = NULL, ...)
x是一个非负数值向量,表示每个扇形的面积,而labels则是表示各扇形标签的字符型向量。
> phylum <- read.delim('/Users/kimhan/Desktop/phylum.txt', sep = '\t', stringsAsFactors = FALSE, check.names = FALSE)
> pie(phylum$a1, col = c('blue', 'orange', 'red', 'green2', 'purple', 'cyan'), labels = phylum$phylum, font = 3, main = 'Sample: a1\nPhylum level')
2. 绘制3D饼图
plotrix包中提供了一个可绘制3D效果饼图的命令pie3D()。
install.packages("plotrix")
> library(plotrix)
> pie3D(phylum$a1, col = c('blue', 'orange', 'red', 'green2', 'purple', 'cyan'), explode = 0.05, height = 0.1, radius = 0.85, labels = phylum$phylum, labelcex = 1, main = 'Sample: a1\nPhylum level')
3. ggplot()绘制饼图
绘制一个饼图之前,需要绘制一个条形图,该条形图有多个分组,这就需要设置映射的x参数映射为一个常量因子,fill映射为分类因子,即用geom_bar()绘制条形图,然后使用coord_polar(theta = 'y')以y轴为基准将默认的笛卡尔坐标系转化为极坐标样式得到饼图:
> ggplot(phylum, aes(x = '', y = a1, fill = phylum)) +
+ geom_bar(stat = 'identity', width = 1) +
+ coord_polar(theta = 'y')
Error: `data` must be uniquely named but has duplicate columns
> phylum[,4] <- NULL
> phylum
phylum a1 a2
1 Proteobacteria 6378 6708
2 Actinobacteria 662 557
3 Firmicutes 526 551
4 Bacteroidetes 469 392
5 Acidobacteria 212 149
6 Nitrospirae 61 27
> ggplot(phylum, aes(x = '', y = a1, fill = phylum)) +
+ geom_bar(stat = 'identity', width = 1) +
+ coord_polar(theta = 'y')