简体   繁体   中英

Grouped bar chart using ggplot2

I have some data structured in the same way as the following:

structure(list(respectfromsuperior = structure(c(1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, NA, 2L, 1L, 1L, 1L, 1L, 2L), .Label = c("agree", 
"disagree"), class = "factor"), respectideserve = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
2L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L), .Label = c("agree", 
"disagree"), class = "factor"), undesirablechange = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, NA, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, NA, 1L, 2L, 1L, 2L, 2L, 2L), .Label = c("agree", 
"disagree"), class = "factor"), jobsecuritypoor = structure(c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 
2L, 2L, 2L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("agree", 
"disagree"), class = "factor"), promotionprospectsadequate = structure(c(2L, 
1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 
2L, 1L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L), .Label = c("agree", 
"disagree"), class = "factor"), salaryadequate = structure(c(2L, 
1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 
2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("agree", 
"disagree"), class = "factor"), branch = structure(c(1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Edinburgh", 
"Head Office", "Manchester"), class = "factor")), .Names = c("respectfromsuperior", 
"respectideserve", "undesirablechange", "jobsecuritypoor", "promotionprospectsadequate", 
"salaryadequate", "branch"), class = "data.frame", row.names = c(1L, 
2L, 4L, 6L, 10L, 11L, 13L, 15L, 16L, 17L, 19L, 20L, 22L, 23L, 
25L, 27L, 29L, 30L, 32L, 33L, 34L, 35L, 39L, 40L, 41L, 42L, 43L, 
44L, 45L))

I would like to use ggplot 2 to plot a bar graph with the following features:

  1. the bars representing percentage of respondents who agree with
    statements in columns 2:6 of the data (disagree not plotted). Percentage calculated as a
    percentage of branch members (not as percentage of total respondents)
  2. bars grouped by branch on the x axis
  3. the questions (columns 2:6) are used as the 'Fill' argument

I've tried playing around with the code below but not able to work it out:

data.r <- melt(rewitemsbr, id.vars='branch')
ggplot(data=data.r, aes(x=value, fill=variable)) +
geom_bar(stat="count", position=position_dodge())

this is the best I've come up with:

在此处输入图片说明

Any help very much appreciated thank you.

You can try following.

# get the stats using aggregate
res <- aggregate(d[,1:6], list(d$branch), function(x) sum(x=="agree", na.rm = T)/length(x))
res
  Group.1   respectfromsuperior respectideserve undesirablechange jobsecuritypoor promotionprospectsadequate salaryadequate
1 Edinburgh                 1.0       0.8888889         0.1111111             0.0                  0.6666667      0.4444444
2 Head Office               0.7       0.3000000         0.4000000             0.2                  0.2000000      0.0000000
3 Manchester                0.8       0.8000000         0.2000000             0.1                  0.6000000      0.2000000
# to long format
library(reshape2)
res_long <- melt(res, id.vars='Group.1')
# plot
ggplot(data=res_long, aes(x=Group.1, y=value, fill=variable)) +
  geom_bar(stat="identity", position=position_dodge())

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM