Страница 1 из 1

Диаграмма geom_rect()

Добавлено: 21 апр 2020, 12:47
VistaSV30
Добрый день!

Исходные данные - таблица с двумя столбцами:
- Номер недели (N)
- Вес груза (M)

Количество поставок грузов в неделю может быть любым от 0 и больше

Посчитал количество поставок для каждой недели
df <- table(N, M)

Теперь нужно построить такую диаграмму - Количество поставок по неделям
Изображение

Пробую это сделать с помощью средств пакета ggplot2 - geom_rect()
Не получается из df получить координаты для прямоугольников.

Пробовал преобразовать table() в data.frame() тогда в таблице получаются только 3 колонки.

Помогите, кто знает.
Спасибо!

Re: Диаграмма geom_rect()

Добавлено: 21 апр 2020, 14:55
gamm
VistaSV30 писал(а):
21 апр 2020, 12:47
тогда в таблице получаются только 3 колонки
столько и должно быть. Если нужно больше (ширину w) считаем руками.
hint: ?geom_rect
и читаем, и вникаем :mrgreen:

Код: Выделить всё

set.seed(123)
x<-factor(sample(1:5,10,replace=TRUE),levels=1:5)
y<-factor(sample(1:5,10,replace=TRUE),levels=1:5)
table.df<-as.data.frame(table(x,y))
names(table.df)<-c("X","Y","Count")
ggplot(table.df,aes(X,Y))+geom_tile(aes(fill=Count),colour="grey50")

Re: Диаграмма geom_rect()

Добавлено: 21 апр 2020, 18:42
VistaSV30
Спасибо уважаемый gamm!
Сделал все по Вашему образцу. Теперь всё работает как надо.

Но можно еще вопрос "для повышения собственной образованности".
Есть ли возможность в R преобразовать table() в data.frame() так, чтоб сохранилась структура table?
Или для пользователей R в этом в принципе нет необходимости?

Re: Диаграмма geom_rect()

Добавлено: 21 апр 2020, 21:40
gamm
table - это матрица, видимо она Вам и нужна, а не data.frame. Нужно просто атрибуты поменять

Код: Выделить всё

set.seed(123)
x<-factor(sample(1:5,10,replace=TRUE),levels=1:5)
y<-factor(sample(1:5,10,replace=TRUE),levels=1:5)
table.tbl<-table(x,y)
table.mtr<-table.tbl
class(table.mtr)<-"matrix"
print(table.mtr)
# и если уж очень хочется data.frame (непонятно, правда, зачем - шахматка в виде матрицы удобнее)
table.mtr.df<-as.data.frame(table.mtr)
print(table.mtr.df)