我设法将一些数据汇总为以下内容:
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
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个条形图,其中月份的条形彼此相邻,因此对于上面的示例,一月到四月将有两个条形(一个用于 2011 年,一个用于 2012 年),其余月份将只有一个条形代表2011 年。
我知道我必须使用beside=T,但我想我需要创建某种矩阵才能使条形图正确显示。我在弄清楚那一步是什么时遇到了问题。我有一种感觉,它可能涉及matrix但出于某种原因,我完全被一个看起来非常简单的解决方案难住了。
另外,我有这个数据:y=c('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')我想在我的 names.arg 中使用它。当我尝试将它与上述数据一起使用时,它告诉我选择了未定义的列,我认为这意味着我需要y. 我怎样才能解决这个问题?
要使用,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)
Run Code Online (Sandbox Code Playgroud)

或者您可以将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)
Run Code Online (Sandbox Code Playgroud)
