Есть ли функция, которая выполняет сложенный график для двух переменных по оси x и двух переменных по оси y в r

#r

#r

Вопрос:

Мне не удается построить несколько осей в ggplot. Вот данные

 df <- read.table(text = "Site   Type   Day1   Day2   Day3
              A SD 780 431 295 
              B SD 350 377 255 
              B M 480 179 560  
              A M 240 876 789 
              C FO 840 179 NA  
              C FI 350 NA 255 
              A NF 508 NA 565 
              B NF 405 876 NA  ", header = TRUE)
  

вот код

 ggplot(data = df, aes(x = interaction(Type, Site, lex.order = TRUE), 
                  y = count, group = Type))  
  geom_bar(colour = "blue")  
  annotate(geom = "text", x = Type), y = Day1, label = df$Site, size = 2)  
  annotate(geom = "text", x = Site, y = Day2, label = unique(df$Type), size = 8)  
  coord_cartesian(ylim = c(0, 850), expand = FALSE, clip = "off")  
   theme_bw()  
   theme(plot.margin = unit(c(1, 1, 4, 1), "bars"),
         axis.title.x = element_blank(),
        axis.text.x = element_blank(),
        panel.grid.major.x = element_blank(),
        panel.grid.minor.x = element_blank())
  

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

Ответ №1:

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

 df %>% pivot_longer(cols = -c(Site,Type)) %>%
  mutate(Type = factor(Type,levels = c('SD', 'M', 'NF', 'FO', 'FI'),ordered = T)) %>%
  ggplot(aes(x=Site,y=value,fill=name)) 
  geom_bar(stat='identity') 
  facet_wrap(.~Type,scales = 'free_x',ncol = 5, strip.position = "bottom") 
  theme_minimal() 
  theme(strip.placement  = "outside",
        panel.spacing    = unit(0, "points"),
        strip.background = element_blank(),
        strip.text       = element_text(face = "bold", size = 12))
  
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Как мне сделать первый и второй столбцы одинакового размера с другими столбцами? Также как мне расположить их так, чтобы они были в этом порядке {SD, M, NF, FO, FI}?

2. @MisBlearnsR Чтобы упорядочить, вы можете добавить эту строку кода перед ggplot строкой mutate(Type = factor(Type,levels = c('SD', 'M', 'NF', 'FO', 'FI'),ordered = T)) . В случае размера, пожалуйста, проверьте с width внутри geom_bar()

3. В нем говорится, что не удалось найти функцию «mutate».

4. @MisBlearnsR Я отредактировал код для вас, пожалуйста, проверьте и посмотрите также, загружены ли вы dplyr или tidyverse пакеты!

5. Загрузка пакетов помогла решить проблему. Удивительно, но это не сработало с моим другим набором данных.