如何在 R 中使用 ggplot2 创建带有百分比标签的饼图?
在本文中,我们将了解如何使用 R 编程语言中的 ggplot2 创建带有百分比标签的饼图。
使用的包
R 编程中的 dplyr 包可用于执行数据操作和统计。可以在 R 中使用以下命令下载和安装该软件包。
install.packages("dplyr")
R 编程中的ggplot2 包用于绘制图形以可视化数据并使用各种图表对其进行描述。运行以下命令后,该包用作库。
install.packages("ggplot2")
R 编程中的 ggplot 方法用于使用指定的数据框进行图形可视化。它用于实例化 ggplot 对象。可以为绘图对象创建美学映射,以分别确定 x 轴和 y 轴之间的关系。可以将其他组件添加到创建的 ggplot 对象中。
Syntax: ggplot(data = NULL, mapping = aes(), fill = )
Arguments :
- data – Default dataset to use for plot.
- mapping – List of aesthetic mappings to use for plot.
可以使用各种方法将几何图形添加到绘图中。 R 编程中的 geom_line() 方法可用于在绘制的图中添加图形线。它作为组件添加到现有绘图中。审美映射还可以包含颜色属性,这些属性根据不同的数据帧进行不同的分配。
geom_bar() 方法用于构造与每组中的案例数成比例的条形高度。
Syntax: geom_bar ( width, stat)
Arguments :
width – Bar width
coord_polar()组件随后被添加到 geoms 之外,以便我们确保我们正在构建极坐标中的堆叠条形图。
Syntax: coord_polar(theta = “x”, start = 0)
Arguments :
theta – variable to map angle to (x or y)
start – Offset of starting point from 12 o’clock in radians.
接下来是用于进行文本注释的geom_text() 方法的应用。
geom_text(aes() , label, size)
下面是实现:
R
# importing the required libraries
library(dplyr)
library(ggplot2)
library(ggrepel)
library(forcats)
library(scales)
# creating a data frame
data_frame <- data.frame(col1 = letters[1:3],
col2 = c(46,24,12))
print("Original DataFrame")
print(data_frame)
sum_of_obsrv <- 82
# computing the pie chart
pie_chart <- ggplot(data_frame, aes(x="", y=col2, fill=col1)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0) +
geom_text(aes(y = col2/2 + c(0, cumsum(col2)[-length(col2)]),
label = percent(col2/sum_of_obsrv )), size=5)
# printing the percentage
print(pie_chart)
R
# importing required libraries
library(dplyr)
library(ggplot2)
library(ggmap)
# creating a data frame
data_frame <- data.frame(col1 = c(28,69,80,40),
col2 = LETTERS[1:4]) %>%
mutate(col2 = factor(col2, levels = LETTERS[1:4]),
# computing the column values
cf = cumsum(col1),
mid = cf - col1 / 2,
label = paste0(col2, " ", round(col1 / sum(col1) * 100, 1), "%"))
# printing the data frame
print("Original DataFrame")
print(data_frame)
# creating a plot
ggplot(data_frame, aes(x = 1, weight = col1, fill =col2)) +
geom_bar(width = 1) +
coord_polar(theta = "y") +
geom_text(aes(x = 1.3, y = mid, label = label)) +
theme_nothing()
输出
[1] "Original DataFrame"
col1 col2
1 a 46
2 b 24
3 c 12
为了适应par图表内的指数和水平,我们可以对数据框本身进行突变,以避免在图表绘制过程中进行累积频率及其对应中点的计算。这种方法比以前的方法更简单。在这种方法中,三个必需的数据属性以列的形式附加到数据框中,它们是:
- 累积频率,由 cumsum() 方法以列名作为参数计算。
- 中点,计算为累积频率与列值之差的一半。
- label 用于以文本注释的形式计算标签。
紧随其后的是方法 theme_nothing 的应用,它简单地去除了 ggplot2 中的所有主题元素。
R
# importing required libraries
library(dplyr)
library(ggplot2)
library(ggmap)
# creating a data frame
data_frame <- data.frame(col1 = c(28,69,80,40),
col2 = LETTERS[1:4]) %>%
mutate(col2 = factor(col2, levels = LETTERS[1:4]),
# computing the column values
cf = cumsum(col1),
mid = cf - col1 / 2,
label = paste0(col2, " ", round(col1 / sum(col1) * 100, 1), "%"))
# printing the data frame
print("Original DataFrame")
print(data_frame)
# creating a plot
ggplot(data_frame, aes(x = 1, weight = col1, fill =col2)) +
geom_bar(width = 1) +
coord_polar(theta = "y") +
geom_text(aes(x = 1.3, y = mid, label = label)) +
theme_nothing()
输出
[1] "Original DataFrame"
col1 col2 cf mid label
1 28 A 28 14.0 A 12.9%
2 69 B 97 62.5 B 31.8%
3 80 C 177 137.0 C 36.9%
4 40 D 217 197.0 D 18.4%