Преобразуйте визуализацию данных с помощью ggplot и сетки фасетов в таблицу - PullRequest
1 голос
/ 30 марта 2020

Функция facet_grid() в очень полезна для визуализации множественных зависимостей между переменными. Однако иногда существует предел, до которого все еще имеет смысл визуализировать данные, например, , и может быть лучше просто использовать таблицу.

Let´ Предположим, я визуализировал некоторые данные, подобные этим:

library(dplyr)
library(ggplot2)

set.seed(123)

cat1 <- as.character(sample(1:7, 1000, replace = T))
cat2 <- as.character(sample(1:9, 1000, replace = T))
cat3 <- as.character(sample(1:3, 1000, replace = T))
count <- sample(1:1000, 100, replace = T)
df <- data.frame(cat1, cat2, cat3, count)

df <- df %>%
  group_by(cat1, cat2, cat3) %>%
  summarise(count = sum(count)) %>%
  mutate(share = count / sum(count) * 100)

ggplot(df, aes(cat1, share)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = paste0(round(df$share, 2), "\n(", df$count, ")")), size = 3) +
  facet_grid(cat3 ~ cat2, scales = "free")

Теперь я решил, что имеет смысл использовать таблицу. Есть ли способ преобразовать структуру визуализации в этом примере в таблицу, которая использует те же зависимости категории и содержит доли и счетчики в своих ячейках?

Спасибо за ваше предложение.

1 Ответ

0 голосов
/ 31 марта 2020

Надеюсь, я вас правильно понял, я думаю, вы можете использовать geom_table() в ggpmisc, сначала вам нужно вложить таблицу в категории фасетов:

library(ggpmisc)
library(tidyr)
library(dplyr)
library(ggplot2)

df %>% 
mutate(share=round(share,digits=3)) %>% 
nest(data=c(cat1,count,share))
# A tibble: 27 x 3
# Groups:   cat2 [9]
   cat2  cat3            data
   <fct> <fct> <list<df[,3]>>
 1 1     1            [7 × 3]
 2 1     2            [7 × 3]
 3 1     3            [7 × 3]
 4 2     1            [7 × 3]
 5 2     2            [7 × 3]
 6 2     3            [7 × 3]
 7 3     1            [7 × 3]
 8 3     2            [7 × 3]
 9 3     3            [7 × 3]
10 4     1            [7 × 3]

И мы можем построить ее:

df %>% 
mutate(share=round(share,digits=3)) %>% 
nest(data=c(cat1,count,share)) %>% 
ggplot() + geom_point(aes(x=0,y=0),color=NA) +
geom_table(aes(x=0,y=0,label = data),
vjust="middle",hjust="middle",size=2)+
facet_grid(cat3 ~ cat2) + theme_void()

enter image description here

Вы также можете проверить это обсуждение , а также руководство для ggpmis c.

...