Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make a stacked barplot with nested grouping variables?

I am trying to make a stacked barplot with two variables. My desired outcome looks like this:

this

This is the first part of my data. There are 220 more rows:

      Type      Week Stage
   <chr>    <dbl> <dbl>
 1 Captured     1     2
 2 Captured     1     1
 3 Captured     1     1
 4 Captured     1     2
 5 Captured     1     1
 6 Captured     1     3
 7 Captured     1    NA
 8 Captured     1     3
 9 Captured     1     2
10 Captured     1     1

So far I'm not getting anywhere, this is my code so far

library(data.table)
dat.m <- melt(newrstudio2, id.vars="Type")
dat.m

library(ggplot2)
ggplot(dat.m, aes(x=Type, y=value, fill=variable)) +
  geom_bar(stat="identity")

I guess I need to calculate the number of observations of each stage in each week of each type? I've tried both long and wide data, but I somehow need to combine week with type? I don't know, I'm at a loss.

like image 824
Sabto Avatar asked Sep 06 '25 05:09

Sabto


1 Answers

Alternative way:

set.seed(123)
# sample data
my_data <- data.frame(Type = sample(c("W", "C"), 220, replace = TRUE),
                      Week = sample(paste0("Week ", 1:4), 220, replace = TRUE),
                      Stage = sample(paste0('S', 1:4), 220, replace = TRUE))
head(my_data)
library(ggplot2)

ggplot(my_data, aes(x = Type, fill = Stage)) + 
  geom_bar(aes(y = (..count..)/sum(..count..)), position = "fill") +
  facet_grid(. ~ Week, switch="both") + 
  scale_y_continuous(labels = scales::percent) + 
  ylab("Stage [%]") + 
  theme(strip.background = element_blank(),
        strip.placement = "outside",
        panel.spacing = unit(0, "lines"))

enter image description here

like image 104
Adela Avatar answered Sep 07 '25 18:09

Adela