2

I have a problem creating a geom_bar two tables using ggplot. I have two tables:

1) 
  characteristic men_weekly_earnings
1     16 to 24 years               493
2     16 to 19 years               392
3     20 to 24 years               507
4     25 to 34 years               755
5     35 to 44 years               964
6     45 to 54 years              1011
7     55 to 64 years              1021
8 65 years and older               942


2)
  characteristic women_weekly_earnings
1     16 to 24 years                 451
2     16 to 19 years                 357
3     20 to 24 years                 468
4     25 to 34 years                 679
5     35 to 44 years                 781
6     45 to 54 years                 780
7     55 to 64 years                 780
8 65 years and older                 740

Each table have data of weekly earnings by a different age. my goal is to combine the two tables into one to be like this.

the x axis is the characteristic column and the y axis is the weekly_earnings column.

For now i tried this code (for the men table, and it's not working

  ggplot(data = men) + geom_col(mapping = aes(x= characteristic,y=  men_weekly_erning))

what can I do now?

Thank you.

1
  • what is the error you are getting? Commented Jul 20, 2017 at 18:51

1 Answer 1

3

Welcome to Stack Overflow!

I think your best option would be to stack the two datasets together and then plot them. Something like this:

df_all <- rbind(cbind(setNames(men_df, c("characteristic", "weekly_earnings")), source = "men"),
                cbind(setNames(women_df, c("characteristic", "weekly_earnings")), source = "women"))


ggplot(data = df_all) + 
   geom_col(mapping = aes(x= source, y =  weekly_earnings, fill = characteristic), position = position_dodge())

enter image description here

Notice how when I create df_all I'm adding a column specifying the source (either "men"/"women") depending on where the data came from. This allows you to break it out in the ggplot call. Also note the I had to make the column names consistent between the two datasets before stacking. I used the setNames command for this.


Data:

women_df <- structure(list(characteristic = c("16 to 24 years", "16 to 19 years", 
"20 to 24 years", "25 to 34 years", "35 to 44 years", "45 to 54 years", 
"55 to 64 years", "65 years and older"), women_weekly_earnings = c(451L, 
357L, 468L, 679L, 781L, 780L, 780L, 740L)), .Names = c("characteristic", 
"women_weekly_earnings"), row.names = c(NA, -8L), class = "data.frame")

men_df <- structure(list(characteristic = c("16 to 24 years", "16 to 19 years", 
"20 to 24 years", "25 to 34 years", "35 to 44 years", "45 to 54 years", 
"55 to 64 years", "65 years and older"), men_weekly_earnings = c(493L, 
392L, 507L, 755L, 964L, 1011L, 1021L, 942L)), .Names = c("characteristic", 
"men_weekly_earnings"), row.names = c(NA, -8L), class = "data.frame")
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.