wds
wds

Reputation: 32293

Create a barplot of two tables of differing length

I can not seem to figure out how to get a nice barplot that contains the data from two tables that contain a different number of columns.

The tables in question are something like (snipped some data from the end):

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

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

Note the column names and sizes are different. When I just do barplot() on one of these tables it comes out with the plot I'd like (showing the column names as the X-axis, frequencies on Y-axis). But, I would like these two side by side.

I've gotten as far as creating a data frame containing both variables as comments and the different row names in the first column (with data.frame()and merge()), but when I plot this the X-axis seems to be all wrong. Attempting to reorder the columns gives me an exception about lengths differing.

Code:

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

This shows a plot, but not all labels are present and the value for position 26 is plotted after 33.

Is there any simple way to get this plot working? A ggplot2 solution would be nice.

Upvotes: 0

Views: 3612

Answers (1)

Didzis Elferts
Didzis Elferts

Reputation: 98459

You can put all your data in one data frame (as in example).

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

Then ggplot() with geom_bar() can be used to plot the data.

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

Upvotes: 2

Related Questions