我设法将一些数据汇总到以下内容中:
Month Year Number
1 1 2011 3885
2 2 2011 3713
3 3 2011 6189
4 4 2011 3812
5 5 2011 916
6 6 2011 3813
7 7 2011 1324
8 8 2011 1905
9 9 2011 5078
10 10 2011 1587
11 11 2011 3739
12 12 2011 3560
13 1 2012 1790
14 2 2012 1489
15 3 2012 1907
16 4 2012 1615
我正在尝试创建一个条形图,其中几个月的条形图彼此相邻,因此对于上面的示例,1月到4月将有两个条形图(一个用于2011年,一个用于2012年),其余月份将只有代表2011年的一个酒吧。
我知道我必须使用beside=T
,但我想我需要创建某种矩阵才能使条形图正确显示。我有一个问题,弄清楚这一步是什么。我觉得它可能涉及matrix
,但由于某种原因,我完全被这个看起来非常简单的解决方案所困扰。
另外,我有这个数据:y=c('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
我想在我的名字中使用.arg。当我尝试将它与上述数据一起使用时,它会告诉我选择了未定义的列,这意味着我需要y
中的16个变量。我该如何解决这个问题?
答案 0 :(得分:4)
要使用barplot
,您需要重新排列数据:
dat <- read.table(text = " Month Year Number
1 1 2011 3885
2 2 2011 3713
3 3 2011 6189
4 4 2011 3812
5 5 2011 916
6 6 2011 3813
7 7 2011 1324
8 8 2011 1905
9 9 2011 5078
10 10 2011 1587
11 11 2011 3739
12 12 2011 3560
13 1 2012 1790
14 2 2012 1489
15 3 2012 1907
16 4 2012 1615",sep = "",header = TRUE)
y <- c('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
barplot(rbind(dat$Number[1:12],c(dat$Number[13:16],rep(NA,8))),
beside = TRUE,names.arg = y)
或者您可以将 ggplot2 与数据一起使用:
dat$Year <- factor(dat$Year)
dat$Month <- factor(dat$Month)
ggplot(dat,aes(x = Month,y = Number,fill = Year)) +
geom_bar(position = "dodge") +
scale_x_discrete(labels = y)