如何在 R 中为不相等的组大小创建百分比堆栈图?

How to create a percentage stack plot for unequal group size in R?

我有 2 个样本量不相等的组,即“A”和“B”。 “A”的大小为 19,“B”的大小为 15,数据的总大小为 34。他们有一个名为“Drug1”的分类变量,用于指示 A 组和 B 组有多少人服用该药物,因此值“Drug1”变量是 YES 和 NO。

我如何创建一个百分比堆栈图,我可以在其中显示两个组以及每个服用药物和不服用药物的人数(以相互叠加的百分比表示)?我还想在栏中注释百分比值

这是输入的示例:

dat1<- data.frame(id=1:n,
Group=sample(c("A", "B"), 6, replace = TRUE) , 
Drug1=sample(c("Yes", "No"), 6, replace = TRUE)) 

通过将两个变量转换为因子(例如 df$Drug1 = as.factor(df$Drug1))并使用基本 plot() 函数将它们相互绘制,可以轻松获得堆叠的百分比条形图:

plot(df$Group,df$Drug1,xlab="Group of Participand",ylab="Drug taken")

我想这就是你想要的:

library(ggplot2)

dataset <- data.frame(
  Groups = as.factor(sample(c("A", "B"), 30, replace = T)),
  Drug_1 = as.factor(sample(c("Yes", "No"), 30, replace = T))
)


df_tbl <- table(dataset)

df_tbl <- round(100 * prop.table(df_tbl, margin = 1), 2)

df_tbl <- as.data.frame(df_tbl)

ggplot(df_tbl, aes(fill = Drug_1, y = Freq, x = Groups)) +
  geom_bar(position = "stack", stat = "identity") + 
  labs(y = "Percent") +
  geom_text(aes(label = Freq), position = "stack", vjust = 2)