Как сделать граненую вафельную таблицу, заполняя каждую корзину сверху слева
Я пытаюсь создать сетку ячеек 3x4 с подсчетом наблюдений из моих данных в каждой ячейке. Я на полпути:
library(ggplot2)
type <- c('daily', 'daily', 'habit', 'habit', 'habit', 'seasonal', 'seasonal', 'year-long', 'year-long', 'year-long', 'year-long', 'year-long')
status <- c('complete', 'incomplete', 'push', 'push', 'incomplete', 'complete', 'complete', 'complete', 'complete', 'push', 'push', 'incomplete')
results <- data.frame(type, status)
ggplot(results) +
geom_dotplot(aes(x=status, y=type), binwidth=.2) +
facet_grid(vars(type))
Ясно, что ось Y сейчас бессмысленна - я не уверен, что geom_dotplot
это то, что нужно использовать. Я могу получить аналогичные результаты сgeom_histogram
или geom_bar
также.
Я бы хотел, чтобы точки начинались в верхнем левом углу каждой корзины. Это возможно? Я пробовал использоватьwaffle
пакет, но не могу понять. В идеале каждая точка должна быть квадратом, что невозможно при использованииgeom_dotplot
, поэтому я бы предпочел использовать waffle
если я могу.
1 ответ
В настоящее время существует открытая проблема с этим пакетом waffle, из-за которой я не смог создать диаграмму так, как я хотел (получение ошибки "недопустимый аргумент 'times'"), используя facet_grid как для статуса, так и для типа.
В качестве альтернативы мы можем провести некоторую подготовку данных, чтобы создать нечто подобное.
rows <- 4
cols <- 4
results %>%
arrange(status, type) %>%
group_by(status, type) %>%
mutate(num = row_number(),
x_pos = (num - 1) %/% rows,
y_pos = rows - (num - 1) %% rows - 1) %>%
ggplot(aes(x = x_pos, y = y_pos)) +
geom_tile(fill = "black", color = "white") +
coord_equal(xlim = c(0, cols) - 0.5,
ylim = c(0, rows) - 0.5) +
facet_grid(vars(type), vars(status)) +
theme_light() +
theme(panel.grid = element_blank(),
axis.text = element_blank())