如何在 ggplot2 中绘制显示 R 百分比的堆积条?
在本文中,我们将了解如何在 ggplot2 中绘制堆叠条形图,以显示 R 编程语言中的百分比。
R 中的 plyr 包用于拆分数据,对其执行操作,然后将其重新组合在一起。它用于执行数据操作。可以使用以下命令将该软件包下载并安装到工作空间中:
install.packages("plyr")
R 中的 ddply 方法用于在对数据帧的每个子集应用函数后将结果组合到单个数据帧中。
Syntax: ddply(.data, .variables, .fun = NULL)
Arguments :
- data: The data frame to be used
- variables: variables to split data frame by
- fun: the function to be applied on the data frame
这里要应用的函数可以是变换函数,它可以用来追加或删除或改变数据框中的列。它可用于在数据框中添加更多列。通过计算数据框中每个组件的分数,可以将百分比列添加到数据框中。
然后,百分比列可用于使用“%”符号附加标签。该列是使用 paste0() 方法构造的,该方法用于通过将百分比与相应的“%”符号相结合来连接字符串。
paste0(str1, str2)
ggplot2 包用于数据可视化和绘图。可以使用以下命令将该软件包下载并安装到工作空间中:
install.packages("ggplot2")
此包中的 ggplot 方法用于构建各种绘图,如散点图、箱线图等。这些绘图将要使用的数据框作为输入,并使用 x 和 y 坐标提供美学映射。可以使用分组列指定的颜色添加其他参数。
Syntax: ggplot (data, mapping = aes(x= , y= , fill = ))
Arguments :
- data: The data frame to be used
- mapping: aesthetic mapping supplied by aes() method
此包中的 geom_bar() 方法用于使条形的高度与每组中的案例数成正比。它具有以下语法:
Syntax: geom_bar(position , stat = “identity” )
Arguments :
- position: Position adjustment
geom_text 方法可用于向堆叠条添加文本并将它们堆叠在一起。标签被分配为计算的百分比标签字符串。可以使用标签参数及其对应位置来分配标签。可以使用 size 参数进一步自定义。
Syntax: geom_text(mapping = NULL, position , size)
Arguments :
- mapping: Aesthetic mappings
- position: The position adjustment to use for overlapping points on this layer
- size: the size of the text added
例子:
R
# importing the required library
library(plyr)
library(ggplot2)
# creating the data frame
data_frame < - data.frame(stringsAsFactors=FALSE,
col1=c(rep(5: 7, each=4)),
col2=c(rep(1: 4, each=3)),
col3=c(1: 12))
# printing the data frame
print("original dataframe")
print(data_frame)
# adding the
data_frame = ddply(data_frame, .(col2), transform,
percentage=col1/sum(col1) * 100)
# adding the percentage label
data_frame$prcntlabel = paste0(sprintf("%.0f",
data_frame$percentage),
"%")
# printing the modified data frame
print("converted dataframe")
print(data_frame)
# adding graph of plotting data
ggplot(data_frame, aes(x=factor(col2), y=col3, fill=col1)) +
geom_bar(position=position_stack(), stat="identity") +
geom_text(aes(label=prcntlabel), position=position_stack(vjust=0.5), size=2) +
coord_flip()
输出
[1] "original dataframe"
col1 col2 col3
1 5 1 1
2 5 1 2
3 5 1 3
4 5 2 4
5 6 2 5
6 6 2 6
7 6 3 7
8 6 3 8
9 7 3 9
10 7 4 10
11 7 4 11
12 7 4 12
[1] "converted dataframe"
col1 col2 col3 percentage prcntlabel
1 5 1 1 33.33333 33%
2 5 1 2 33.33333 33%
3 5 1 3 33.33333 33%
4 5 2 4 29.41176 29%
5 6 2 5 35.29412 35%
6 6 2 6 35.29412 35%
7 6 3 7 31.57895 32%
8 6 3 8 31.57895 32%
9 7 3 9 36.84211 37%
10 7 4 10 33.33333 33%
11 7 4 11 33.33333 33%
12 7 4 12 33.33333 33%