📜  如何在 ggplot2 中绘制显示 R 百分比的堆积条?

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

如何在 ggplot2 中绘制显示 R 百分比的堆积条?

在本文中,我们将了解如何在 ggplot2 中绘制堆叠条形图,以显示 R 编程语言中的百分比。

R 中的 plyr 包用于拆分数据,对其执行操作,然后将其重新组合在一起。它用于执行数据操作。可以使用以下命令将该软件包下载并安装到工作空间中:

install.packages("plyr")

R 中的 ddply 方法用于在对数据帧的每个子集应用函数后将结果组合到单个数据帧中。

这里要应用的函数可以是变换函数,它可以用来追加或删除或改变数据框中的列。它可用于在数据框中添加更多列。通过计算数据框中每个组件的分数,可以将百分比列添加到数据框中。

然后,百分比列可用于使用“%”符号附加标签。该列是使用 paste0() 方法构造的,该方法用于通过将百分比与相应的“%”符号相结合来连接字符串。

paste0(str1, str2)

ggplot2 包用于数据可视化和绘图。可以使用以下命令将该软件包下载并安装到工作空间中:

install.packages("ggplot2")

此包中的 ggplot 方法用于构建各种绘图,如散点图、箱线图等。这些绘图将要使用的数据框作为输入,并使用 x 和 y 坐标提供美学映射。可以使用分组列指定的颜色添加其他参数。

此包中的 geom_bar() 方法用于使条形的高度与每组中的案例数成正比。它具有以下语法:

geom_text 方法可用于向堆叠条添加文本并将它们堆叠在一起。标签被分配为计算的百分比标签字符串。可以使用标签参数及其对应位置来分配标签。可以使用 size 参数进一步自定义。

例子:

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%