创建两个不同长度的表的条形图

时间:2013-03-13 09:52:53

标签: r plot ggplot2

我似乎无法弄清楚如何获得一个包含来自两个包含不同列数的表的数据的漂亮条形图。

有问题的表格类似于(从末尾剪下一些数据):

> tab1
   1    2    3    6    8   31
5872 1525  831  521  299    4

> tab2
   1    2    3    4   22
7874  422    2    5    1

请注意列名称和大小不同。当我在其中一个表上执行barplot()时,它会显示我想要的图表(将列名称显示为X轴,将频率显示在Y轴上)。但是,我希望这两个并排。

我已经创建了一个包含变量作为注释的数据框和第一列中的不同行名(data.frame()merge()),但是当我绘制这个X时-axis似乎都错了。试图重新排序列给了我一个不同长度的例外。

代码:

combined <- merge(data.frame(tab1), data.frame(tab2), by = c('Var1'), all=T)
barplot(t(combined[,2:3]), names.arg = combined[,1], beside=T)

这显示了一个图,但并非所有标签都存在,位置26的值在33之后绘制。

有没有简单的方法让这个情节有效? ggplot2解决方案会很好。

1 个答案:

答案 0 :(得分:2)

您可以将所有数据放在一个数据框中(如示例所示)。

df<-data.frame(group=rep(c("A","B"),times=c(2,3)),
   values=c(23,56,345,6,7),xval=c(1,2,1,2,8))
  group values xval
1     A     23    1
2     A     56    2
3     B    345    1
4     B      6    2
5     B      7    8

然后使用ggplot() geom_bar()来绘制数据。

ggplot(df,aes(xval,values,fill=group))+
  geom_bar(stat="identity",position="dodge")