Создайте гистограмму из двух таблиц разной длины

Я не могу понять, как получить красивую гистограмму, содержащую данные из двух таблиц, содержащих разное количество столбцов.

Рассматриваемые таблицы выглядят примерно так (некоторые данные вырезаны с конца):

> 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 кажется неправильной. Попытка изменить порядок столбцов дает мне исключение из-за разной длины.

Код:

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 было бы неплохо.


person wds    schedule 13.03.2013    source источник
comment
покажите, что вы уже сделали (в том числе и с ggplot2).   -  person Arun    schedule 13.03.2013
comment
хорошо, я добавил команды, которые я использовал   -  person wds    schedule 13.03.2013


Ответы (1)


Вы можете поместить все свои данные в один фрейм данных (как в примере).

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")
person Didzis Elferts    schedule 13.03.2013
comment
Спасибо. Команда, которую я использовал для получения фрейма данных таким образом, была df <- data.frame(group=rep(c("A", "B"), times=c(length(tab1), length(tab2))), values=c(tab1, tab2), xval=as.numeric(c(names(tab1), names(tab2))) - person wds; 13.03.2013