Как сохранить порядок переменных в соответствии с третьей факторной переменной в ggplot? - PullRequest
1 голос
/ 11 февраля 2020

В этих данных рассмотрим c и t как факторы и f как частоту c.

library(tidyverse)
df <- tribble(~"c", ~"f", ~"t",
              "a", 49, "zoo",
              "b", 12, "foo",
              "p", 9, "zoo",
              "q", 29, "foo",
              "c", 15, "zoo")
df %>% 
  ggplot(aes(as.factor(c), f, fill = t)) +
  geom_bar(stat = "identity") +
  aes(x = fct_reorder(c, f, .desc = F)) +
  coord_flip()

Приведенные выше коды дают этот график

enter image description here

На этом графике как сохранить похожие переменные вместе, например, синий рядом с синим и красный с красным.

Ответы [ 3 ]

2 голосов
/ 11 февраля 2020

В дополнение к ответу @ akrun, вы можете передать несколько аргументов в функции facet_grid и theme, чтобы сделать ваш граненый график похожим на один:

df %>% 
  ggplot(aes(as.factor(c), f, fill = t)) +
  geom_bar(stat = "identity") +
  aes(x = fct_reorder(c, f, .desc = F)) +
  coord_flip()+
  facet_grid(t~., scales = "free_y", space = "free_y")+
  theme(strip.background.y = element_blank(),
        strip.text.y = element_blank(),
        panel.margin.y = unit(-0.25, "lines"))

enter image description here

2 голосов
/ 11 февраля 2020

Нам не понадобится facet_grid, если мы arrange данных соответствующим образом.

library(dplyr)
library(ggplot2)

df %>% 
  arrange(t, f) %>%
  mutate(c = factor(c, levels = unique(c))) %>% 
  ggplot(aes(c, f, fill = t)) +
  geom_bar(stat = "identity") +
  coord_flip()

enter image description here

2 голосов
/ 11 февраля 2020

Мы можем разделить с facet_grid

library(dplyr)
library(ggplot2)
df %>%
     ggplot(aes(c, f, fill = t)) +
           geom_bar(stat = 'identity') +
           aes(x = fct_reorder(c, f, .desc = F)) +
           coord_flip() + 
           facet_grid(~ t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...