如何在ggplot中制作一个条形图,将不同年份的月份分组

时间:2013-07-15 21:25:16

标签: r ggplot2

我的数据框,df

df
   EffYr EffMo count        dts
2   2012     1     1 2012-01-01
3   2012     2     3 2012-02-01
4   2012     3     1 2012-03-01
5   2012     5     1 2012-05-01
6   2012     6     1 2012-06-01
7   2012     7     2 2012-07-01
8   2012     8    11 2012-08-01
9   2012     9    84 2012-09-01
10  2012    10   184 2012-10-01
11  2012    11   165 2012-11-01
12  2012    12   246 2012-12-01
13  2013     1   414 2013-01-01
14  2013     2   130 2013-02-01
15  2013     3   182 2013-03-01
16  2013     4   261 2013-04-01
17  2013     5   229 2013-05-01
18  2013     6   249 2013-06-01
19  2013     7   330 2013-07-01
20  2013     8   135 2013-08-01

每一行df代表一个“月 - 年”,最早的是2012年1月,最晚是2013年8月。我想绘制一个条形图(使用ggplot2),其中每个条形代表一行{条形高度等于行df的{​​1}}。所以,我应该总共有24个吧。

我希望将x轴分为12个区间:Jan-Dec,代表相同日历月的条形应位于相同的“月间隔”中。例如,如果count在2011年1月,2012年1月,2013年1月有一行,那么我的图表的Jan部分应该有3个柱,以便我可以比较我的业务在1月份的业绩。

由于

编辑:我想要一些看起来像

的东西
df

但按月分解。我试图修改该代码以适合我的数据,但永远不能正确。

1 个答案:

答案 0 :(得分:2)

@Ben你问的是一些ggplot2问题。我建议你坐下来用一些好的ggplot2资源,试试这个例子来提高技能。以下是我经常使用的两个优秀资源:

http://docs.ggplot2.org/current/
http://www.cookbook-r.com/Graphs/

现在解决方案我认为你正在追求:

## dat <- read.table(text="   EffYr EffMo count        dts
## 2   2012     1     1 2012-01-01
## 3   2012     2     3 2012-02-01
## 4   2012     3     1 2012-03-01
## 5   2012     5     1 2012-05-01
## 6   2012     6     1 2012-06-01
## 7   2012     7     2 2012-07-01
## 8   2012     8    11 2012-08-01
## 9   2012     9    84 2012-09-01
## 10  2012    10   184 2012-10-01
## 11  2012    11   165 2012-11-01
## 12  2012    12   246 2012-12-01
## 13  2013     1   414 2013-01-01
## 14  2013     2   130 2013-02-01
## 15  2013     3   182 2013-03-01
## 16  2013     4   261 2013-04-01
## 17  2013     5   229 2013-05-01
## 18  2013     6   249 2013-06-01
## 19  2013     7   330 2013-07-01
## 20  2013     8   135 2013-08-01", header=TRUE)

dat$month <- factor(month.name[dat$EffMo], levels = month.name)
dat$year <- as.factor(dat$EffYr)

ggplot(dat, aes(month, fill=year)) + geom_bar(aes(weight=count), position="dodge")

enter image description here