R语言 如何使用ggplot2创建一个带有百分比标签的饼图
在这篇文章中,我们将看到如何在R编程语言中使用ggplot2创建一个带有百分比标签的饼图。
使用的软件包
R编程中的dplyr包 可以用来进行数据操作和统计。该包可以使用R语言中的以下命令下载和安装。
install.packages("dplyr")
R编程中的 ggplot2包 用于绘制图形,使数据可视化,并使用各种图表进行描述。运行以下命令后,该包被用作一个库。
install.packages("ggplot2")
R编程中的ggplot方法 是用来使用指定的数据框架进行图形可视化的。它被用来实例化一个ggplot对象。可以为绘图对象创建美学映射,以分别确定x轴和y轴之间的关系。可以向创建的ggplot对象添加其他组件。
语法: ggplot(data = NULL, mapping = aes(), fill = )
参数 :
- data – 用于绘图的默认数据集。
- mapping – 用于绘图的审美贴图列表。
Geom可以用各种方法添加到绘图中。 R编程中的 geom_line()方法 可以用来在绘图中添加图形线。它被作为一个组件添加到现有的绘图中。美学映射也可以包含颜色属性,根据不同的数据框架分配不同的颜色。
geom_bar()方法 用于构建与每组病例数成比例的条形高度。
语法: geom_bar ( width, stat)
参数 :
width – 条形图的宽度
然后在geoms之外添加 coord_polar() 组件,这样我们就能确保以极坐标构建一个堆积的条形图。
语法: coord_polar(theta = “x”, start = 0)
参数:
theta – 将角度映射到(x或y)的变量
start – 起点与12点的偏移,单位为弧度。
接下来是应用 geom_text()方法 ,用来做文本注释。
geom_text(aes() , label, size)
以下是实施情况 。
# 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)
输出
[1] "Original DataFrame"
col1 col2
1 a 46
2 b 24
3 c 12
为了将指数与水平一起容纳在参数图内,我们可以对数据框架本身进行突变,以避免在图表绘制过程中进行累积频率及其相应中点的计算。这种方法没有前一种方法那么繁琐。在这种方法中,所需的三个数据属性以列的形式附加到数据框中,它们是 。
- 累积频率,由cumsum()方法计算,参数为列名。
- 中间点,计算为累积频率与列值之差的一半。
- 标签,用于计算文本注释形式的标签。
接下来是theme_nothing方法的应用,它简单地剥离了ggplot2中的所有主题元素。
# 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%