Simple stacked bar chart not working

Hi just trying to do a simple stacked bar chart using ggplot 2 and not sure where my error is.

When I start with this code, i get the below chart

g <- ggplot(stream_df, aes(demographic))
g + geom_bar()

When I add the fill=gender, I would expect to get the same chart with each demographic split with male and female, but I get this

g <- ggplot(stream_df, aes(demographic))
g + geom_bar(aes(fill = gender))

From what I have read and tutorials I have looked at is says they should automatically stack, not sure if this is an issue working on Mac, but can't figure out why they won't stack.

I have tried adding in stat=identity, and using the stack command, but then it asks for a Y value, and all I am trying to do is get a cumulative or total percentage for Y. I have seen examples using y=percent, and y=percentage, but when I try these I get an error that says 'percent' cannot be found.

Explaining the data
Demographic is a factor with value 1-4
Gender is M or F

Appreciate any guidance on this.

You didn't share the data so I had to simulate some, but I wasn't able to reproduce your issue:

library(tidyverse)

stream_df <-
  tibble(
    gender = sample(c("F", "M"), 1000, TRUE),
    demographic = sample(1:4, 1000, TRUE)
  )

stream_df
#> # A tibble: 1,000 x 2
#>    gender demographic
#>    <chr>        <int>
#>  1 F                3
#>  2 M                1
#>  3 M                2
#>  4 M                4
#>  5 M                3
#>  6 M                4
#>  7 F                1
#>  8 F                2
#>  9 F                2
#> 10 M                4
#> # … with 990 more rows

g <- ggplot(stream_df, aes(demographic))
g + geom_bar(aes(fill = gender))

Created on 2020-10-09 by the reprex package (v0.3.0)

Thanks, I appreciate the response. My data looks exactly like you have set it up, and it is strange. If I copy your reproduced data into a new rmd file, I get the same result as you have, but in my main file I still get the issue as above.

The only difference I can see is in your data the Gender column is a 'chr' and in my main data it is 'fctr'. I am new to R and don't really understand the difference here, would that cause the issue?

edit - I converted to 'chr' and I still get the same result as my example above, ie not stacked. Really don't understand this. Is there anything else to check in terms of the way the data has been imported?

I have also seen this error 'Warning position_stack requires non-overlapping x intervals'

If you can share your data that would be helpful. You can do this by calling:

dput(stream_df)

And pasting the results inside code fences...

Comparing to the data you have simulated, the main differences I can see are:

  • Your gender information comes first in the output
  • At the end, the class for your data has class = c("tbl_df", "tbl", "data.frame")), where mine only has "data.frame"
structure(list(demographic = c(1L, 1L, 3L, 4L, 2L, 4L, 3L, 4L, 
4L, 2L, 2L, 1L, 3L, 1L, 4L, 4L, 4L, 4L, 1L, 4L, 1L, 4L, 2L, 2L, 
1L, 2L, 2L, 3L, 2L, 4L, 4L, 4L, 1L, 4L, 4L, 4L, 1L, 3L, 2L, 4L, 
4L, 3L, 4L, 3L, 4L, 1L, 4L, 3L, 3L, 4L, 3L, 2L, 2L, 1L, 1L, 2L, 
4L, 3L, 2L, 4L, 1L, 2L, 1L, 4L, 1L, 4L, 4L, 1L, 4L, 1L, 3L, 2L, 
1L, 3L, 4L, 3L, 2L, 4L, 4L, 1L, 4L, 1L, 2L, 4L, 1L, 4L, 1L, 1L, 
2L, 1L, 1L, 3L, 4L, 3L, 4L, 1L, 1L, 3L, 3L, 4L, 1L, 1L, 4L, 4L, 
1L, 1L, 4L, 3L, 3L, 4L, 4L, 1L, 1L, 2L, 2L, 3L, 1L, 2L, 3L, 4L, 
4L, 3L, 2L, 3L, 1L, 4L, 2L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 4L, 4L, 
3L, 3L, 4L, 3L, 4L, 2L, 4L, 2L, 1L, 4L, 1L, 3L, 4L, 4L, 2L, 2L, 
4L, 2L, 3L, 2L, 2L, 2L, 1L, 3L, 2L, 4L, 3L, 1L, 1L, 2L, 4L, 2L, 
4L, 4L, 3L, 1L, 2L, 4L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 4L, 4L, 1L, 
4L, 4L, 4L, 4L, 4L, 1L, 1L, 3L, 1L, 4L, 2L, 3L, 1L, 4L, 1L, 1L, 
4L, 2L, 1L, 4L, 4L, 2L, 1L, 4L, 3L, 1L, 4L, 4L, 4L, 1L, 4L, 4L, 
3L, 2L, 2L, 1L, 1L, 4L, 3L, 4L, 1L, 2L, 2L, 3L, 1L, 2L, 2L, 4L, 
2L, 3L, 4L, 4L, 2L, 1L, 2L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 1L, 3L, 
4L, 3L, 2L, 4L, 4L, 2L, 2L, 4L, 2L, 3L, 3L, 2L, 2L, 4L, 4L, 2L, 
2L, 3L, 3L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 4L, 3L, 1L, 3L, 
3L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 4L, 2L, 4L, 4L, 1L, 2L, 
2L, 3L, 4L, 1L, 4L, 1L, 1L, 4L, 2L, 3L, 2L, 1L, 2L, 2L, 4L, 4L, 
2L, 4L, 2L, 2L, 4L, 3L, 4L, 1L, 1L, 3L, 4L, 4L, 4L, 3L, 2L, 3L, 
4L, 2L, 1L, 4L, 2L, 1L, 2L, 2L, 4L, 3L, 4L, 2L, 4L, 1L, 3L, 1L, 
1L, 1L, 1L, 3L, 3L, 1L, 4L, 1L, 3L, 2L, 4L, 1L, 4L, 2L, 1L, 2L, 
4L, 2L, 4L, 3L, 2L, 3L, 3L, 1L, 1L, 4L, 3L, 2L, 2L, 1L, 1L, 3L, 
2L, 4L, 1L, 3L, 4L, 3L, 2L, 1L, 3L, 4L, 2L, 4L, 2L, 1L, 4L, 4L, 
2L, 1L, 4L, 2L, 2L, 2L, 4L, 2L, 3L, 3L, 4L, 4L, 2L, 3L, 1L, 4L, 
3L, 1L, 4L, 3L, 4L, 4L, 3L, 1L, 3L, 3L, 2L, 3L, 3L, 1L, 1L, 1L, 
2L, 3L, 3L, 4L, 3L, 1L, 1L, 4L, 2L, 3L, 3L, 2L, 3L, 3L, 2L, 2L, 
3L, 4L, 1L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 1L, 2L, 4L, 3L, 3L, 
4L, 2L, 2L, 4L, 1L, 2L, 1L, 4L, 4L, 1L, 4L, 4L, 1L, 4L, 4L, 2L, 
1L, 2L, 4L, 2L, 4L, 4L, 4L, 2L, 3L, 4L, 4L, 3L, 2L, 1L, 4L, 1L, 
2L, 4L, 1L, 2L, 2L, 1L, 2L, 3L, 4L, 2L, 4L, 4L, 3L, 4L, 1L, 4L, 
1L, 4L, 4L, 4L, 4L, 2L, 1L, 3L, 4L, 2L, 3L, 3L, 2L, 3L, 4L, 4L, 
2L, 2L, 2L, 3L, 4L, 3L, 4L, 3L, 4L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 
1L, 4L, 1L, 4L, 3L, 2L, 1L, 1L, 4L, 2L, 3L, 4L, 3L, 4L, 1L, 3L, 
3L, 1L, 2L, 1L, 4L, 4L, 4L, 2L, 1L, 4L, 3L, 3L, 1L, 4L, 1L, 4L, 
2L, 2L, 1L, 2L, 3L, 3L, 3L, 1L, 3L, 4L, 1L, 3L, 4L, 1L, 3L, 1L, 
1L, 3L, 3L, 4L, 4L, 2L, 4L, 4L, 3L, 3L, 4L, 4L, 1L, 1L, 3L, 4L, 
1L, 3L, 4L, 2L, 2L, 3L, 2L, 3L, 1L, 4L, 4L, 4L, 2L, 2L, 2L, 3L, 
2L, 4L, 2L, 3L, 2L, 1L, 4L, 1L, 4L, 4L, 4L, 4L, 1L, 2L, 4L, 1L, 
2L, 2L, 2L, 3L, 3L, 4L, 2L, 3L, 2L, 4L, 1L, 2L, 4L, 3L, 4L, 4L, 
4L, 1L, 2L, 4L, 1L, 2L, 4L, 4L, 4L, 2L, 4L, 2L, 4L, 2L, 3L, 4L, 
1L, 2L, 3L, 3L, 3L, 4L, 3L, 3L, 2L, 2L, 1L, 2L, 1L, 4L, 4L, 2L, 
4L, 4L, 3L, 1L, 2L, 1L, 4L, 1L, 4L, 4L, 4L, 2L, 3L, 4L, 2L, 4L, 
3L, 4L, 3L, 3L, 3L, 4L, 2L, 1L, 3L, 4L, 4L, 4L, 2L, 2L, 3L, 2L, 
1L, 1L, 1L, 2L, 4L, 2L, 3L, 4L, 4L, 2L, 2L, 3L, 1L, 1L, 4L, 3L, 
4L, 2L, 4L, 2L, 2L, 3L, 2L, 2L, 1L, 3L, 4L, 2L, 1L, 2L, 1L, 4L, 
1L, 4L, 3L, 3L, 3L, 2L, 2L, 2L, 1L, 2L, 4L, 2L, 4L, 2L, 4L, 2L, 
2L, 1L, 4L, 3L, 3L, 4L, 4L, 4L, 2L, 4L, 4L, 2L, 1L, 4L, 2L, 4L, 
4L, 4L, 1L, 4L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 4L, 2L, 3L, 3L, 2L, 
3L, 3L, 2L, 1L, 3L, 4L, 2L, 3L, 2L, 4L, 2L, 2L, 2L, 2L, 1L, 3L, 
2L, 4L, 4L, 4L, 2L, 4L, 1L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 2L, 4L, 
4L, 3L, 4L, 4L, 1L, 3L, 1L, 3L, 3L, 3L, 3L, 2L, 1L, 4L, 3L, 2L, 
1L, 3L, 3L, 1L, 4L, 3L, 2L, 4L, 1L, 2L, 2L, 4L, 1L, 2L, 2L, 2L, 
3L, 2L, 1L, 1L, 3L, 4L, 3L, 2L, 2L, 3L, 3L, 2L, 4L, 2L, 1L, 2L, 
3L, 4L, 1L, 3L, 4L, 3L, 4L, 4L, 3L, 3L, 4L, 2L, 2L, 1L, 1L, 2L, 
2L, 1L, 3L, 1L, 2L, 1L, 4L, 4L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 
4L, 4L, 3L, 2L, 1L, 1L, 4L, 3L, 3L, 2L, 4L, 3L, 1L, 3L, 3L, 4L, 
2L, 4L, 2L, 3L, 3L, 2L, 2L, 3L, 4L, 4L, 2L, 4L, 1L, 2L, 3L, 2L, 
1L, 2L, 2L, 4L, 3L, 3L, 3L, 2L, 1L, 3L, 4L, 4L, 1L, 4L, 2L, 4L, 
2L, 2L, 1L, 2L, 3L, 2L, 1L, 2L, 4L, 3L, 4L, 3L, 4L, 1L, 3L, 2L, 
1L, 2L, 4L, 3L, 4L, 1L, 2L, 4L, 1L, 2L, 4L, 3L, 1L, 3L, 3L, 2L, 
2L, 4L, 1L, 1L, 4L, 4L, 2L, 2L, 2L), gender = c("F", "F", "F", 
"M", "M", "M", "F", "M", "M", "M", "M", "F", "F", "F", "M", "M", 
"M", "M", "F", "M", "F", "M", "M", "M", "F", "M", "M", "F", "M", 
"M", "M", "M", "F", "M", "M", "M", "F", "F", "M", "M", "M", "F", 
"M", "F", "M", "F", "M", "F", "F", "M", "F", "M", "M", "F", "F", 
"M", "M", "F", "M", "M", "F", "M", "F", "M", "F", "M", "M", "F", 
"M", "F", "F", "M", "F", "F", "M", "F", "M", "M", "M", "F", "M", 
"F", "M", "M", "F", "M", "F", "F", "M", "F", "F", "F", "M", "F", 
"M", "F", "F", "F", "F", "M", "F", "F", "M", "M", "F", "F", "M", 
"F", "F", "M", "M", "F", "F", "M", "M", "F", "F", "M", "F", "M", 
"M", "F", "M", "F", "F", "M", "M", "M", "F", "M", "F", "M", "F", 
"M", "M", "M", "F", "F", "M", "F", "M", "M", "M", "M", "F", "M", 
"F", "F", "M", "M", "M", "M", "M", "M", "F", "M", "M", "M", "F", 
"F", "M", "M", "F", "F", "F", "M", "M", "M", "M", "M", "F", "F", 
"M", "M", "F", "F", "F", "F", "F", "F", "F", "M", "M", "F", "M", 
"M", "M", "M", "M", "F", "F", "F", "F", "M", "M", "F", "F", "M", 
"F", "F", "M", "M", "F", "M", "M", "M", "F", "M", "F", "F", "M", 
"M", "M", "F", "M", "M", "F", "M", "M", "F", "F", "M", "F", "M", 
"F", "M", "M", "F", "F", "M", "M", "M", "M", "F", "M", "M", "M", 
"F", "M", "M", "M", "M", "M", "M", "M", "M", "F", "F", "M", "F", 
"M", "M", "M", "M", "M", "M", "M", "F", "F", "M", "M", "M", "M", 
"M", "M", "F", "F", "F", "F", "F", "M", "M", "M", "F", "F", "M", 
"M", "F", "F", "F", "F", "M", "M", "F", "F", "M", "F", "M", "M", 
"M", "M", "M", "M", "M", "F", "M", "M", "F", "M", "F", "M", "F", 
"F", "M", "M", "F", "M", "F", "M", "M", "M", "M", "M", "M", "M", 
"M", "M", "F", "M", "F", "F", "F", "M", "M", "M", "F", "M", "F", 
"M", "M", "F", "M", "M", "F", "M", "M", "M", "F", "M", "M", "M", 
"F", "F", "F", "F", "F", "F", "F", "F", "F", "M", "F", "F", "M", 
"M", "F", "M", "M", "F", "M", "M", "M", "M", "F", "M", "F", "F", 
"F", "F", "M", "F", "M", "M", "F", "F", "F", "M", "M", "F", "F", 
"M", "F", "M", "F", "F", "M", "M", "M", "M", "F", "M", "M", "M", 
"F", "M", "M", "M", "M", "M", "M", "F", "F", "M", "M", "M", "F", 
"F", "M", "F", "F", "M", "F", "M", "M", "F", "F", "F", "F", "M", 
"F", "F", "F", "F", "F", "M", "F", "F", "M", "F", "F", "F", "M", 
"M", "F", "F", "M", "F", "F", "M", "M", "F", "M", "F", "F", "M", 
"F", "F", "M", "F", "F", "M", "F", "M", "M", "F", "F", "M", "M", 
"M", "M", "F", "M", "F", "M", "M", "F", "M", "M", "F", "M", "M", 
"M", "F", "M", "M", "M", "M", "M", "M", "M", "F", "M", "M", "F", 
"M", "F", "M", "F", "M", "M", "F", "M", "M", "F", "M", "F", "M", 
"M", "M", "M", "F", "M", "F", "M", "F", "M", "M", "M", "M", "M", 
"F", "F", "M", "M", "F", "F", "M", "F", "M", "M", "M", "M", "M", 
"F", "M", "F", "M", "F", "M", "F", "F", "M", "M", "F", "M", "F", 
"F", "M", "F", "M", "F", "M", "F", "F", "M", "M", "F", "M", "F", 
"M", "F", "F", "F", "F", "M", "F", "M", "M", "M", "M", "F", "M", 
"F", "F", "F", "M", "F", "M", "M", "M", "F", "M", "F", "F", "F", 
"F", "F", "M", "F", "F", "M", "F", "F", "F", "F", "F", "F", "M", 
"M", "M", "M", "M", "F", "F", "M", "M", "F", "F", "F", "M", "F", 
"F", "M", "M", "M", "F", "M", "F", "F", "M", "M", "M", "M", "M", 
"M", "F", "M", "M", "M", "F", "M", "F", "M", "F", "M", "M", "M", 
"M", "F", "M", "M", "F", "M", "M", "M", "F", "F", "M", "M", "F", 
"M", "M", "F", "M", "M", "F", "M", "M", "M", "F", "M", "M", "F", 
"M", "M", "M", "M", "M", "M", "M", "M", "M", "F", "M", "F", "M", 
"F", "F", "F", "M", "F", "F", "M", "M", "F", "M", "F", "M", "M", 
"M", "M", "M", "F", "F", "M", "F", "M", "F", "M", "M", "M", "M", 
"F", "M", "M", "M", "F", "M", "F", "F", "F", "M", "M", "F", "F", 
"M", "M", "M", "M", "M", "F", "M", "F", "F", "F", "M", "M", "M", 
"F", "M", "M", "M", "M", "F", "F", "F", "M", "F", "M", "M", "M", 
"M", "M", "F", "M", "M", "F", "F", "M", "M", "F", "M", "F", "M", 
"F", "M", "F", "F", "F", "M", "M", "M", "F", "M", "M", "M", "M", 
"M", "M", "M", "M", "F", "M", "F", "F", "M", "M", "M", "M", "M", 
"M", "M", "F", "M", "M", "M", "M", "M", "F", "M", "F", "F", "M", 
"M", "M", "M", "F", "M", "M", "F", "F", "M", "F", "F", "M", "F", 
"F", "M", "M", "F", "M", "M", "M", "M", "M", "M", "F", "F", "M", 
"M", "M", "M", "M", "M", "F", "M", "M", "M", "M", "F", "F", "F", 
"M", "M", "M", "F", "M", "M", "F", "F", "F", "F", "F", "F", "F", 
"M", "F", "M", "F", "M", "F", "F", "F", "F", "M", "F", "M", "M", 
"F", "M", "M", "M", "F", "M", "M", "M", "F", "M", "F", "F", "F", 
"M", "F", "M", "M", "F", "F", "M", "M", "M", "F", "M", "F", "M", 
"F", "F", "M", "F", "M", "M", "F", "F", "M", "M", "M", "F", "F", 
"M", "M", "F", "F", "F", "M", "F", "M", "M", "M", "M", "M", "M", 
"F", "F", "M", "F", "M", "M", "F", "M", "F", "F", "M", "F", "F", 
"M", "M", "F", "F", "F", "F", "M", "M", "M", "M", "F", "F", "M", 
"M", "F", "M", "M", "M", "M", "F", "M", "F", "M", "F", "M", "M", 
"M", "F", "F", "F", "M", "F", "F", "M", "M", "F", "M", "M", "M", 
"M", "M", "F", "M", "F", "M", "F", "M", "M", "F", "M", "F", "M", 
"F", "F", "M", "F", "M", "M", "F", "M", "F", "M", "M", "F", "M", 
"M", "F", "F", "F", "F", "M", "M", "M", "F", "F", "M", "M", "M", 
"M", "M")), row.names = c(NA, -993L), class = "data.frame")

This is the issue:

with(stream_df, table(demographic, gender))
#>            gender
#> demographic   F   M
#>           1 215   0
#>           2   0 267
#>           3 209   0
#>           4   0 302

You do not have observations in each of the 8 combinations of groups. The warning provided by ggplot() indicated this:

Warning message:
position_stack requires non-overlapping x intervals 

You can't stack the bars if theres nothing to stack.

1 Like

Ok, feeling like a dunce here, really appreciate your time and apologies for potentially wasting it.

No worries. Happy to help.

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.