Home > Software engineering >  Combine multiple histograms ggplot
Combine multiple histograms ggplot

Time:04-22

I have several character variables with the same dimensions of outcome that I would like to compare. I am able to create a hsitogram for each of these variables:

ggplot(MD, aes()) geom_bar(aes(x = vielfalt_alter), stat = "count")

enter image description here

and ggplot(MD, aes()) geom_bar(aes(x = vielfalt_bildung), stat = "count") enter image description here

How can I combine the two histograms, in a way that the bars for each value stand beside each other and the variables are distinguishable via different colours?

dput(MD3)
structure(list(vielfalt_alter = c("Teilweise vielfältig", "Eher vielfältig", 
NA, NA, "Eher vielfältig", "Sehr vielfältig", "Eher vielfältig", 
NA, "Sehr vielfältig", "Sehr vielfältig", NA, "Eher vielfältig", 
NA, "Sehr vielfältig", "Eher vielfältig", "Eher vielfältig", 
"Eher vielfältig", "Teilweise vielfältig", "Eher vielfältig", 
NA, NA, "Sehr vielfältig", "Eher vielfältig", "k. A.", NA, "Eher vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", NA, NA, "Eher vielfältig", NA, "Sehr vielfältig", 
NA, "Eher vielfältig", NA, "Nicht vielfältig", NA, "Teilweise vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", "Eher nicht vielfältig", 
NA, "Teilweise vielfältig", NA, NA, NA, NA, "Teilweise vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", NA, NA, "Eher vielfältig", 
"Sehr vielfältig", NA, "Teilweise vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", NA, "Nicht vielfältig", "Eher vielfältig", 
"Eher vielfältig", "Eher vielfältig", "Eher vielfältig", NA, 
NA, "Eher vielfältig", NA, "Sehr vielfältig", NA, "Sehr vielfältig", 
"Sehr vielfältig", "Eher nicht vielfältig", "Sehr vielfältig", 
"Teilweise vielfältig", "Sehr vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Eher nicht vielfältig", 
"Eher vielfältig", "Eher vielfältig", "Eher nicht vielfältig", 
"Teilweise vielfältig", NA, "Eher vielfältig", "Sehr vielfältig", 
NA, "Sehr vielfältig", "Eher vielfältig", "Eher vielfältig", 
NA, "Sehr vielfältig", "Teilweise vielfältig", "Sehr vielfältig", 
"Eher nicht vielfältig", "Eher vielfältig", "Eher vielfältig", 
"Sehr vielfältig", "Eher vielfältig", "Eher vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Sehr vielfältig", "Eher vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig"), vielfalt_bildung = c("Eher vielfältig", 
"Nicht vielfältig", NA, NA, "Teilweise vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", NA, "Sehr vielfältig", "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Sehr vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", NA, NA, "Eher vielfältig", "Eher nicht vielfältig", 
"Eher vielfältig", NA, "Teilweise vielfältig", "Sehr vielfältig", 
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig", 
NA, NA, "Eher vielfältig", NA, "Sehr vielfältig", NA, "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Eher nicht vielfältig", "Eher vielfältig", 
"Eher vielfältig", "Eher nicht vielfältig", NA, "Teilweise vielfältig", 
NA, NA, NA, NA, "Sehr vielfältig", "Eher vielfältig", "Sehr vielfältig", 
NA, NA, "Teilweise vielfältig", "Sehr vielfältig", NA, "Teilweise vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", NA, "Eher vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", NA, NA, "Eher vielfältig", NA, "Teilweise vielfältig", 
NA, "Eher nicht vielfältig", "Sehr vielfältig", "Eher vielfältig", 
"Eher vielfältig", "Eher vielfältig", "Sehr vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Sehr vielfältig", "k. A.", 
"Eher vielfältig", "Teilweise vielfältig", "k. A.", NA, "Teilweise vielfältig", 
"Sehr vielfältig", NA, "Teilweise vielfältig", "Teilweise vielfältig", 
"Teilweise vielfältig", NA, "Sehr vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Sehr vielfältig", 
"Eher vielfältig", "Eher vielfältig", "Sehr vielfältig", "Teilweise vielfältig", 
"Teilweise vielfältig", "Eher nicht vielfältig", "Eher nicht vielfältig", 
"Teilweise vielfältig"), vielfalt_geschlecht = c("Eher vielfältig", 
"Eher vielfältig", NA, NA, "Eher nicht vielfältig", "Eher nicht vielfältig", 
"Teilweise vielfältig", NA, "Eher nicht vielfältig", "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Sehr vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", "Eher nicht vielfältig", "Teilweise vielfältig", 
"Eher nicht vielfältig", NA, NA, "Eher vielfältig", "Eher vielfältig", 
"Eher vielfältig", NA, "Teilweise vielfältig", "Sehr vielfältig", 
"Teilweise vielfältig", "Eher vielfältig", "Sehr vielfältig", 
NA, NA, "Teilweise vielfältig", NA, "Sehr vielfältig", NA, "Eher nicht vielfältig", 
NA, "Eher nicht vielfältig", NA, "Eher nicht vielfältig", "Eher vielfältig", 
"Eher vielfältig", "k. A.", NA, "Nicht vielfältig", NA, NA, NA, 
NA, "k. A.", "Teilweise vielfältig", "Teilweise vielfältig", 
NA, NA, "Eher vielfältig", "Sehr vielfältig", NA, "Eher nicht vielfältig", 
"Eher vielfältig", "Teilweise vielfältig", NA, "Sehr vielfältig", 
"Nicht vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Teilweise vielfältig", NA, NA, "Teilweise vielfältig", NA, "Eher nicht vielfältig", 
NA, "Eher nicht vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", "Eher nicht vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Sehr vielfältig", "Eher nicht vielfältig", 
"k. A.", "Eher vielfältig", "Teilweise vielfältig", "k. A.", 
NA, "Nicht vielfältig", "k. A.", NA, "Teilweise vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", NA, "Eher vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Eher nicht vielfältig", 
"Teilweise vielfältig", "Eher nicht vielfältig", "Teilweise vielfältig", 
"Eher nicht vielfältig", "Eher nicht vielfältig", "Eher vielfältig", 
"Sehr vielfältig", "Eher nicht vielfältig", "Eher nicht vielfältig", 
"Sehr vielfältig", "Eher vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", "Eher vielfältig"), vielfalt_kultur = c("Eher nicht vielfältig", 
"Teilweise vielfältig", NA, NA, "Eher nicht vielfältig", "Sehr vielfältig", 
"Eher nicht vielfältig", NA, "Teilweise vielfältig", "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Eher vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", NA, NA, "Teilweise vielfältig", "Eher vielfältig", 
"Eher vielfältig", NA, "Eher vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
NA, NA, "Sehr vielfältig", NA, "Sehr vielfältig", NA, "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Eher vielfältig", "Sehr vielfältig", 
"Eher nicht vielfältig", "Eher nicht vielfältig", NA, "Eher nicht vielfältig", 
NA, NA, NA, NA, "Sehr vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
NA, NA, "Eher nicht vielfältig", "Sehr vielfältig", NA, "Eher nicht vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", NA, "Eher vielfältig", 
"Nicht vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", NA, NA, "Eher vielfältig", NA, "Eher nicht vielfältig", 
NA, "Teilweise vielfältig", "Eher nicht vielfältig", "Eher nicht vielfältig", 
"Eher vielfältig", "Eher vielfältig", "Sehr vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Sehr vielfältig", "Teilweise vielfältig", 
"Teilweise vielfältig", "Eher nicht vielfältig", "Eher vielfältig", 
NA, "Eher nicht vielfältig", "Sehr vielfältig", NA, "Sehr vielfältig", 
"Eher nicht vielfältig", "Eher vielfältig", NA, "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Teilweise vielfältig", 
"Eher nicht vielfältig", "Eher nicht vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", "Sehr vielfältig", "Sehr vielfältig", "Eher nicht vielfältig", 
"Eher vielfältig", "Eher nicht vielfältig"), vielfalt_körper = c("Eher nicht vielfältig", 
"Teilweise vielfältig", NA, NA, "Teilweise vielfältig", "Eher vielfältig", 
"k. A.", NA, "Sehr vielfältig", "Sehr vielfältig", NA, "Eher vielfältig", 
NA, "Sehr vielfältig", "Teilweise vielfältig", "Eher nicht vielfältig", 
"Eher nicht vielfältig", "Teilweise vielfältig", "Eher nicht vielfältig", 
NA, NA, "Teilweise vielfältig", "Sehr vielfältig", "Eher vielfältig", 
NA, "Teilweise vielfältig", "Teilweise vielfältig", "Eher nicht vielfältig", 
"Eher vielfältig", "Sehr vielfältig", NA, NA, "Eher nicht vielfältig", 
NA, "Sehr vielfältig", NA, "Eher nicht vielfältig", NA, "Teilweise vielfältig", 
NA, "Eher nicht vielfältig", "Teilweise vielfältig", "Eher vielfältig", 
"Eher nicht vielfältig", NA, "Teilweise vielfältig", NA, NA, 
NA, NA, "Eher nicht vielfältig", "Eher vielfältig", "Sehr vielfältig", 
NA, NA, "Eher nicht vielfältig", "Sehr vielfältig", NA, "Eher nicht vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", NA, "Teilweise vielfältig", 
"Eher nicht vielfältig", "Teilweise vielfältig", "Nicht vielfältig", 
"Eher vielfältig", NA, NA, "Teilweise vielfältig", NA, "Eher vielfältig", 
NA, "Eher vielfältig", "Eher vielfältig", "Sehr vielfältig", 
"Eher vielfältig", "Eher nicht vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Sehr vielfältig", "Teilweise vielfältig", 
"Eher nicht vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"k. A.", NA, "Teilweise vielfältig", "k. A.", NA, "Eher vielfältig", 
"Sehr vielfältig", "k. A.", NA, "Eher vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Eher nicht vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", "Teilweise vielfältig", "k. A.", "Eher vielfältig", 
"Teilweise vielfältig", "Sehr vielfältig", "Teilweise vielfältig", 
"Eher nicht vielfältig", "Eher vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", "Eher vielfältig", "Eher vielfältig", 
"Eher nicht vielfältig"), vielfalt_sozial = c("Teilweise vielfältig", 
"Teilweise vielfältig", NA, NA, "Teilweise vielfältig", "Sehr vielfältig", 
"Teilweise vielfältig", NA, "Sehr vielfältig", "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Sehr vielfältig", "Eher vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", NA, NA, "Teilweise vielfältig", "Eher nicht vielfältig", 
"Eher vielfältig", NA, "Eher vielfältig", "Sehr vielfältig", 
"Eher vielfältig", "Eher vielfältig", "Eher vielfältig", NA, 
NA, "Eher vielfältig", NA, "Sehr vielfältig", NA, "Eher vielfältig", 
NA, "Eher vielfältig", NA, "Eher nicht vielfältig", "Eher vielfältig", 
"Eher vielfältig", "Eher nicht vielfältig", NA, "Eher nicht vielfältig", 
NA, NA, NA, NA, "Sehr vielfältig", "Eher vielfältig", "k. A.", 
NA, NA, "Eher nicht vielfältig", "Sehr vielfältig", NA, "Eher nicht vielfältig", 
"Eher vielfältig", "Teilweise vielfältig", NA, "Teilweise vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Teilweise vielfältig", 
"Sehr vielfältig", NA, NA, "Eher vielfältig", NA, "Teilweise vielfältig", 
NA, "Eher vielfältig", "Eher vielfältig", "k. A.", "Eher vielfältig", 
"Eher nicht vielfältig", "Sehr vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Sehr vielfältig", "k. A.", 
"Eher vielfältig", "Teilweise vielfältig", "k. A.", NA, "Eher nicht vielfältig", 
"Sehr vielfältig", NA, "Sehr vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", NA, "Sehr vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Eher vielfältig", "Teilweise vielfältig", 
"Eher vielfältig", "Teilweise vielfältig", "Eher vielfältig", 
"Eher vielfältig", "Teilweise vielfältig", "Sehr vielfältig", 
"Teilweise vielfältig", "Teilweise vielfältig", "Sehr vielfältig", 
"Sehr vielfältig", "Sehr vielfältig", "Teilweise vielfältig", 
"Eher nicht vielfältig", "Eher nicht vielfältig")), row.names = c(NA, 
-114L), class = c("tbl_df", "tbl", "data.frame"))

CodePudding user response:

Given your data frame name is 'MD', you can try this.

tidy_data = gather(MD, new_col, value, factor_key=TRUE)

tidy_data %>% 
  ggplot(aes(value, fill=new_col))  
  geom_bar(stat='count', position = "dodge") theme(axis.text.x = element_text(angle = 90))

enter image description here If you want the plot only for two columns you can do this.

tidy_data %>% 
filter(new_col %in% c('vielfalt_alter', 'vielfalt_bildung'))%>%
ggplot(aes(value, fill=new_col))  
  geom_bar(stat='count', position = "dodge") theme(axis.text.x = element_text(angle = 90))

enter image description here

CodePudding user response:

You need to pivot your data into long format:

ggplot(tidyr::pivot_longer(MD3[1:2], 1:2),
       aes(x = value, fill = name))  
  geom_bar(position = 'dodge')  
  scale_fill_brewer(palette = 'Set1')  
  theme_light()

enter image description here

You can even plot all your columns this way with no extra effort

ggplot(tidyr::pivot_longer(MD3, tidyr::everything()),
       aes(x = value, fill = name))  
  geom_bar(position = 'dodge')  
  scale_fill_brewer(palette = 'Set1')  
  theme_light()

enter image description here

If you need to change the labels in the legend and x axis, use labs

ggplot(tidyr::pivot_longer(MD3[1:2], 1:2),
       aes(x = value, fill = name))  
  geom_bar(position = 'dodge')  
  scale_fill_brewer(palette = 'Set1')  
  theme_light()  
  labs(x = 'My x variables', fill = 'My categories')

enter image description here

To remove NA values, filter them out of your data frame to start with:

ggplot(subset(tidyr::pivot_longer(MD3[1:2], 1:2), !is.na(value)),
       aes(x = value, fill = name))  
  geom_bar(position = 'dodge')  
  scale_fill_brewer(palette = 'Set1')  
  theme_light()  
  labs(x = 'My x variables', fill = 'My categories')

enter image description here

  • Related