【问题标题】:plotting a percentage stacked bar chart in R在 R 中绘制百分比堆积条形图
【发布时间】:2021-04-29 14:00:23
【问题描述】:

所以我有一个简化形式的数据框,如下所示。

|期间|AA|

|第一天 | 1 |

|第一天 | 0 |

|第一天 | 2 |

|第一天 | 2 |

|第 2 天 | 0 |

|第 2 天 | 1 |

|第 3 天 | 1 |

|第 3 天 | 2 |

|第 3 天 | 0 | .

.

.

.

|第 99 天 | 0 |

现在我想为“AA”绘制一个图表,其中“周期”是 x 轴,“0-100”是 y 轴,绘制每个“0”、“1”、“ 2" 的百分比,如百分比堆积条形图。

我为单列 AA 尝试了类似的方法,但它对我想要的没有帮助。

library("ggplot2")
library("dplyr")
Count=1
data <- aggregate(Count ~ ., data, sum)
data <- group_by(data, Period) %>%
mutate(percent = Count / sum(Count)) %>%
as.data.frame()

ggplot(data,
aes(x = Period,
y = percent,
fill = AA)) +
geom_bar(position = "fill", stat = "identity")

【问题讨论】:

标签: r dataframe ggplot2 bar-chart


【解决方案1】:

我想这会解决你的问题

df <- data.frame(
  stringsAsFactors = FALSE,
            Period = c("Day1","Day1","Day1","Day1",
                       "Day2","Day2","Day3","Day3","Day3","Day3","Day4",
                       "Day4","Day4","Day4"),
                AA = c(1L, 0L, 2L, 2L, 0L, 1L, 1L, 2L, 0L, 0L, 1L, 2L, 2L, 2L)
)

suppressMessages(library(tidyverse))

df %>% count(Period, AA) %>%
  ggplot() +
  geom_col(aes(x= Period, y = n, fill= as.character(AA)), position = 'fill')

由reprex package (v2.0.0) 于 2021-05-01 创建

【讨论】:

  • 很高兴它有帮助。如果还没有完成,也请考虑投票
【解决方案2】:

假设你的数据集是这样的:

data <- data.frame(period = rep(paste(rep("Day",5) , 1:5 , sep="") , each=3) , 
                   AA = sample(0:2 , 15 , replace=T),
                   BB = sample(0:2 , 15 , replace=T),
                   CC = sample(0:2 , 15 , replace=T))

然后你可以把它变成你需要的形状。在这里,我从句点中提取数字,以便稍后制作一个不错的数字轴。

data <- data %>%  group_by(period) %>% 
  summarise(across(1:3 , sum)) %>% 
  gather(class, value , 2:4) %>% 
  mutate(period = str_extract(period , "\\d+"))

然后你可以像这样得到你的图表。如果您希望它是条形图而不是柱形图,请添加 + coord_flip()。

ggplot(data , aes(period , value , fill=class))+geom_col(position = "fill")

如果您需要在绘图前计算百分比,那么...

data <- data %>%  group_by(period) %>% 
      summarise(across(1:3 , sum)) %>% 
      gather(class, value , 2:4) %>% 
      group_by(period) %>% 
      mutate(value = value/sum(value)) %>% 
      mutate(period = str_extract(period , "\\d+"))

【讨论】:

  • 嘿,我运行了你的程序,我无法让你理解我在寻找什么,AA、BB、CC 会有不同的图表(我应该没有给出 BB 中的值抄送)。类别基于 1、0、2 的值,而不是 AA、BB、CC。 AA 列中只有 1 或 2 或 0 而不是值范围。
猜你喜欢
  • 2019-09-27
  • 2021-12-22
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多