ggplot中的分组条形图

时间:2018-11-29 14:36:28

标签: r ggplot2

对于示例数据框:

df <- structure(list(year = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 
3, 3, 4, 4, 4, 4, 4), imd.quintile = c(1, 2, 3, 4, 5, 1, 2, 3, 
4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5), average_antibiotic = c(1.17153515458827, 
1.11592565388857, 1.09288449967773, 1.07442652168281, 1.06102887394413, 
1.0560582933182, 1.00678980505929, 0.992997489072538, 0.978343676071694, 
0.967900478870214, 1.02854157116164, 0.98339099101476, 0.981198852494798, 
0.971392872980818, 0.962289579742817, 1.00601488964457, 0.951187417739673, 
0.950706064156994, 0.939174499710836, 0.934948233015044)), .Names = c("year", 
"imd.quintile", "average_antibiotic"), row.names = c(NA, -20L
), vars = "year", drop = TRUE, class = c("grouped_df", "tbl_df", 
"tbl", "data.frame"))

我想生成一个分组的条形图,非常类似于此post

我希望x轴为年份,y轴为average_antibiotic。我想要五个条形图(对于每个imd.quintile-这都是图例)。

我已经尝试了几种方法(基于帖子和其他地方),但无法使其正常工作。

ggplot(df, aes(x = imd.quintile, y = average_antibiotic)) + 
  geom_col() + 
  facet_wrap(~ year)

ggplot(df, aes(x = imd.quintile, y = average_antibiotic)) + 
  geom_bar(aes(fill = imd.quintile), position = "dodge", stat="identity")

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我相信您正在寻找这样的东西:

library(ggplot2)

ggplot(df ) + 
  geom_col(aes(x = year, y = average_antibiotic, group=imd.quintile, fill=imd.quintile), position = "dodge" )  

enter image description here