点击关注,桓峰基因
目前整理出来的教程目录如下:
FigDraw 1. SCI 文章的灵魂 之 简约优雅的图表配色
FigDraw 2. SCI 文章绘图必备 R 语言基础
FigDraw 3. SCI 文章绘图必备 R 数据转换
FigDraw 4. SCI 文章绘图之散点图 (Scatter)
FigDraw 5. SCI 文章绘图之柱状图 (Barplot)
FigDraw 6. SCI 文章绘图之箱线图 (Boxplot)
FigDraw 7. SCI 文章绘图之折线图 (Lineplot)
FigDraw 8. SCI 文章绘图之饼图 (Pieplot)
前言
饼图(pie chart)被广泛地应用于各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个切片,整个圆饼代表数据的总量,每个切片(圆弧)表示该分类占总体的比例,所有切片(圆弧)的加和等于100%。饼图可以很好地帮助用户快速了解数据的占比分配。它的主要缺点是:
(1)饼图不适用于多分类的数据,原则上一张饼图不可多于9个分类。因为随着分类的增多,每个切片就会变小,最后导致大小区分不明显,每个切片看上去都差不多大小,这样对于数据的对比是没有什么意义的;
( 2)相对具备同样功能的其他图表(比如百分比堆积柱形图、圆环图),饼图需要占据更大的画布空间,所以饼图不适合用于数据量大的场景;
(3)很难在多个饼图之间进行数值比较,此时可以使用百分比堆积柱形图或者百分比堆积条形图替代;
(4)饼图不适合多变量的连续数据的占比可视化,此时应该使用百分比堆积面积图展示数据,比如多变量的时序数据。
绘制饼图
如何使用ggplot2绘制饼图。其实ggplot2并没有类似于geom_pie()这样的函数实现饼图的绘制,但ggplot2有一个理念,就是通过极坐标变换绘制饼图,下文就教大家一步步绘制精美的饼图。对于饼图的绘制就说到这里,如果你想绘制3D饼图,ggplot2就不是一个很好的选择,因为其目前还无法实现3D功能。所以我们这里介绍三种绘图方式,每种都有自己的特点,使用时选择适合自己的就可以了!
1. 软件包安装
首先安装软件包如下:
if (!require(ggplot2)) install.packages("ggplot2")
if (!require(graphics)) install.packages("graphics")
if (!require(plotrix)) install.packages("plotrix")
library(ggplot2)
library(graphics)
library(plotrix)
2. 数据读取
我们构造一套数据,水果销售情况,如下:
sales <- c(12, 30, 26, 16, 4, 12)
fruits <- c("Blueberry", "Cherry", "Apple", "Boston Cream", "Other", "Vanilla Cream")
label_value <- paste(fruits, "(", sales, "%", ")", sep = "")
df = data.frame(sales = sales, fruits = fruits, label = label_value)
df
## sales fruits label
## 1 12 Blueberry Blueberry(12%)
## 2 30 Cherry Cherry(30%)
## 3 26 Apple Apple(26%)
## 4 16 Boston Cream Boston Cream(16%)
## 5 4 Other Other(4%)
## 6 12 Vanilla Cream Vanilla Cream(12%)
3. coord_polar{ggplot2}
在绘制饼图之前需要绘制堆叠的条形图,通过将条形图进行极坐标变换后,就能实现饼图绘制了。
p = ggplot(data = df, mapping = aes(x = "Content", y = sales, fill = label)) + geom_bar(stat = "identity",
position = "stack") + theme_bw() + labs(x = "", y = "", title = "") + theme(axis.text = element_blank(),
axis.ticks = element_blank()) + scale_fill_discrete(labels = df$label[order(df$label,
decreasing = F)])
p
饼图在ggplot2中就是通过极坐标变换获得,如下:
p1 = p + coord_polar(theta = "y")
p1
我们也可以将标签写在饼图上面,因此我们先去掉lenged,如下:
p2 = p1 + theme(legend.position = "none")
p2
在加文本的时候,我们需要注意一下调整数据以及文本的顺序,如下:
sig = factor(df$label, levels = df$label[order(df$label, decreasing = T)], ordered = TRUE)
levels(sig)
## [1] "Vanilla Cream(12%)" "Other(4%)" "Cherry(30%)"
## [4] "Boston Cream(16%)" "Blueberry(12%)" "Apple(26%)"
sales1 = df$sales[order(df$label, decreasing = T)]
sales1
## [1] 12 4 30 16 12 26
当顺序都调整好之后,再次绘制饼图,如下:
p3 = p2 + geom_text(aes(y = sales1/2 + c(0, cumsum(sales1)[-length(sales1)]), x = sum(sales1)/80),
label = levels(sig), hjust = 0.5, size = 3.5)
p3
4. pie{graphics}
我们说使用ggplot2太麻烦了,有直接可以绘制饼图的函数,为啥舍近求远呢?直接上函数pie()就完事了呗!
1. 彩虹色饼图
pie(rep(1, 24), col = rainbow(24), radius = 0.9)
2. 默认颜色
我感觉默认颜色其他比ggplot2的颜色搭配清新了许多,有种夏天的感觉,你觉得呢?
pie.sales <- c(0.12, 0.3, 0.26, 0.16, 0.04, 0.12)
names(pie.sales) <- c("Blueberry", "Cherry", "Apple", "Boston Cream", "Other", "Vanilla Cream")
pie(pie.sales) # default colours
3. 修改颜色
pie(pie.sales, col = c("purple", "violetred1", "green3", "cornsilk", "cyan", "white"))
灰色系,有些期刊特别适合这种色系,简单大气!
pie(pie.sales, col = gray(seq(0.4, 1, length.out = 6)))
4. 顺时针
pie(pie.sales, clockwise = TRUE, main = "clockwise = TRUE")
3. pie3D{plotrix}
除了平面的饼图之外,plotrix包也提供绘制3D饼图,这个功能与excel制作的立体饼图非常相似,也同样非常好用。
1. 显示分类
pie3D(df$sales, radius = 1.5, labels = df$fruits, explode = 0.2, main = "3D PIE OPINIONS")
2. 显示分类及比例
pie3D(df$sales, radius = 2, labels = df$label, explode = 0.3, main = "3D PIE OPINIONS")
总结了这么多,是否对饼图怎么搞清晰多了,文章中可能出现的图形都已经包含在细节中,您细品,仔细品就豁然开朗了!!
References:
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Cleveland, W. S. (1985) The Elements of Graphing Data. Wadsworth: Monterey, CA, USA.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
Cleveland, W. S. (1985) The Elements of Graphing Data. Monterey, CA: Wadsworth.
Murrell, P. (2005) R Graphics. Chapman & Hall/CRC Press.
本文使用 文章同步助手 同步