Grouped barplot in ggplot2 in R

I would like to do a grouped graph. Example of my data:

site code  year month gear total value
678490     2012 3     GL   13882
678490     2012 4     GL   50942
678490     2012 5     GL   54973
678490     2012 6     GL   63938
678490     2012 7     GL   23825
678490     2012 8     GL   8195
678490     2012 9     GL   14859
678490     2012 9     RT   3225
678490     2012 10    GL   981
678490     2012 10    RT   19074
678490     2012 11    SD   106384
678490     2012 11    RT   2828
678490     2012 12    GL   107167
678490     2012 12    RT   4514

      

There are 17 site code options, four year options, twelve month options, and four transfer options.

What I would like to produce is a graph per site per year showing the "total cost" for each outfit for each month, like a bar.

So far I have managed to create a site and year specific plot, but with full values ​​displayed in one bar per month, not split into separate columns per month (cannot include an image in the first post!)

But during months 9, 10, 11 and 12 there were two gears used, so I want there to be two bars in those months.

I am using the following piece of code:

ggplot(subset(cdata, year %in% c("2012") & site code %in% c("678490")), 
        aes(x = factor(month), y = total value)) + 
        geom_bar(stat = "identity") +
        labs(x = "Month", y = "Total value")

      

Any help on this would be greatly appreciated.

+3


source to share


1 answer


If you want separate columns for each gear

, then you must add fill=gear

in aes

to geom_bar

:

ggplot(cdata[cdata$year==2012 & cdata$sitecode==678490,],
       aes(x = factor(month), y = totalvalue, fill=gear)) + 
  geom_bar(stat = "identity", position="dodge") +
  labs(x = "Month", y = "Total value")

      

this gives:

enter image description here

If you want to make a plot for the site for the year, indicating the "total value" for each program, for each month you can use as a panel facet_grid

. For example:

ggplot(cdata, aes(x = factor(month), y = totalvalue, fill=gear)) + 
  geom_bar(stat = "identity", position="dodge") +
  labs(x = "Month", y = "Total value") +
  facet_grid(sitecode ~ year)

      



this gives:

enter image description here

Some additional comments:

  • It's probably best not to use spaces in column names (in the code above, I've removed the spaces)
  • Add an example to your question that illustrates the problem you are facing. In this case, it is better to give a sample dataset that includes several sitecodes and several years.

So I compiled some data:

df1 <- read.table(text="sitecode  year month gear totalvalue
678490     2012 3     GL   13882
678490     2012 4     GL   50942
678490     2012 5     GL   54973
678490     2012 6     GL   63938
678490     2012 7     GL   23825
678490     2012 8     GL   8195
678490     2012 9     GL   14859
678490     2012 9     RT   3225
678490     2012 10    GL   981
678490     2012 10    RT   19074
678490     2012 11    SD   106384
678490     2012 11    RT   2828
678490     2012 12    GL   107167
678490     2012 12    RT   4514", header= TRUE)

df2 <- df1
df2$sitecode <- 7849
df2$year <- 2013
df3 <- df1
df3$sitecode <- 7849
df4 <- df1
df4$year <- 2013

cdata <- rbind(df1,df2,df3,df4)

      

+1


source







All Articles