Jordan Lian
Jordan Lian

Reputation: 11

How to plot multiple columns into a barplot in R

This is my dataframe.

    Month NY_Month_Freq Chi_Month_Freq LA_Month_Freq Aus_Month_Freq
1      1           593            204           188             67
2      2           331            174           166             58
3      3           371            211           170             65
4      4           320            219           190             80
5      5           442            222           195             92
6      6           414            236           182             64
7      7           434            245           176             82
8      8           364            250           186             77
9      9           379            216           175             61
10    10           378            205           195             80
11    11           339            203           183             66
12    12           355            185           175             86

I want to plot the different frequencies by month, given the 4 cities.

Upvotes: 1

Views: 46

Answers (2)

william3031
william3031

Reputation: 1708

Same as the answer from @Duck mostly. I didn't see it until after I typed it up.

library(tidyverse)

df <- tibble::tribble(
        ~Month, ~NY_Month_Freq, ~Chi_Month_Freq, ~LA_Month_Freq, ~Aus_Month_Freq,
            1L,           593L,            204L,           188L,             67L,
            2L,           331L,            174L,           166L,             58L,
            3L,           371L,            211L,           170L,             65L,
            4L,           320L,            219L,           190L,             80L,
            5L,           442L,            222L,           195L,             92L,
            6L,           414L,            236L,           182L,             64L,
            7L,           434L,            245L,           176L,             82L,
            8L,           364L,            250L,           186L,             77L,
            9L,           379L,            216L,           175L,             61L,
           10L,           378L,            205L,           195L,             80L,
           11L,           339L,            203L,           183L,             66L,
           12L,           355L,            185L,           175L,             86L
        )


df2 <- df %>% 
  pivot_longer(-Month, names_to = "location", values_to = "count") %>% 
  mutate(location = str_remove(location, "_Month_Freq")) %>% 
  rename(month = Month)

ggplot(df2, aes(month, count, fill = location)) + 
  geom_col(position = "dodge")

Upvotes: 0

Duck
Duck

Reputation: 39585

Try reshaping your data:

library(tidyverse)
#Code
df %>% pivot_longer(-Month) %>%
  ggplot(aes(x=factor(Month),y=value,fill=name))+
  geom_bar(stat = 'identity',position = position_dodge(0.9))+
  labs(fill='city')+
  theme(legend.position = 'top')+xlab('Month')

Output:

enter image description here

Some data used:

#Data
df <- structure(list(Month = 1:12, NY_Month_Freq = c(593L, 331L, 371L, 
320L, 442L, 414L, 434L, 364L, 379L, 378L, 339L, 355L), Chi_Month_Freq = c(204L, 
174L, 211L, 219L, 222L, 236L, 245L, 250L, 216L, 205L, 203L, 185L
), LA_Month_Freq = c(188L, 166L, 170L, 190L, 195L, 182L, 176L, 
186L, 175L, 195L, 183L, 175L), Aus_Month_Freq = c(67L, 58L, 65L, 
80L, 92L, 64L, 82L, 77L, 61L, 80L, 66L, 86L)), class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"))

Upvotes: 1

Related Questions