【问题标题】:How to create a percentage stack plot for unequal group size in R?如何在 R 中为不相等的组大小创建百分比堆栈图?
【发布时间】:2021-05-21 09:54:51
【问题描述】:

我有 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)) 

【问题讨论】:

标签: r categorical-data stacked-chart stackedbarseries


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。但它是否考虑到两组的样本量不相等?也可以在填充中注释百分比值吗?
  • “考虑”是什么意思?这是一个比例图,所以两组总共有 100%,你可以看到份额。组大小无关紧要。如果要添加标签,则需要多行添加文本。如果你想要一个漂亮的情节,最好选择ggplot2 解决方案。
【解决方案2】:

我想这就是你想要的:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-26
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多