📜  如何在 R 中使用 ggplot2 创建带有百分比标签的饼图?

📅  最后修改于: 2022-05-13 01:54:51.645000             🧑  作者: Mango

如何在 R 中使用 ggplot2 创建带有百分比标签的饼图?

在本文中,我们将了解如何使用 R 编程语言中的 ggplot2 创建带有百分比标签的饼图。

使用的包

R 编程中的 dplyr 包可用于执行数据操作和统计。可以在 R 中使用以下命令下载和安装该软件包。

install.packages("dplyr")

R 编程中的ggplot2 包用于绘制图形以可视化数据并使用各种图表对其进行描述。运行以下命令后,该包用作库。

install.packages("ggplot2")

R 编程中的 ggplot 方法用于使用指定的数据框进行图形可视化。它用于实例化 ggplot 对象。可以为绘图对象创建美学映射,以分别确定 x 轴和 y 轴之间的关系。可以将其他组件添加到创建的 ggplot 对象中。

可以使用各种方法将几何图形添加到绘图中。 R 编程中的 geom_line() 方法可用于在绘制的图中添加图形线。它作为组件添加到现有绘图中。审美映射还可以包含颜色属性,这些属性根据不同的数据帧进行不同的分配。

geom_bar() 方法用于构造与每组中的案例数成比例的条形高度。

coord_polar()组件随后被添加到 geoms 之外,以便我们确保我们正在构建极坐标中的堆叠条形图。

接下来是用于进行文本注释的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%