Сгруппированный и категоризированный барплот в R - PullRequest
1 голос
/ 23 апреля 2020

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

Мне нужно иметь тот же график и с левой стороны (кроме ферментов 1-4) иметь категорию ферментов (ферменты 1 и 3 как категория 1 и ферменты 2 и 4 как категория 2). Не могли бы вы помочь мне в этом?

barplot showing positive and negative change for 4 enzymes

library(tidyverse)
data_wide <- tibble(ethnicity = c("ethnicity1", "ethnicity2"),
                    enzyme1 = c(-1, -2), 
                    enzyme2 = c(1, 1),
                    enzyme3 = c(1, 2),
                    enzyme4 = c(-1, 1))
data_long <- data_wide %>% 
  pivot_longer(starts_with("enzyme"), "enzyme")

data_long$Category= c("Category1", "Category2", "Category1", "Category2", "Category1", "Category2", "Category1", "Category2")

data_long1=subset(data_long, ethnicity=="ethnicity1")

data_long1[["sign"]] = ifelse(data_long1[["value"]] >= 0, "positive", "negative")

library(ggplot2)
ggplot()+
  geom_col(data = data_long1, aes(x = enzyme, 
                             y = value,fill = sign))+
  geom_hline(aes(yintercept = 0))+
  coord_flip()+
  theme_linedraw()+ geom_bar() + 
  scale_fill_manual(values = c("positive" = "green", "negative" = "red"))

1 Ответ

1 голос
/ 23 апреля 2020

Одним из возможных решений является огранка вашего графика с использованием facet_grid в функции «Категория» следующим образом:

library(ggplot2)
ggplot(data = data_long1, aes(x = reorder(enzyme, desc(enzyme)), 
                              y = value,fill = sign))+
  geom_col()+
  geom_hline(aes(yintercept = 0))+
  coord_flip(clip = "off")+
  scale_fill_manual(values = c("positive" = "green", "negative" = "red"))+
  facet_grid(Category~., scales = "free_y", switch = "y", space = "free_y")+
  theme(strip.text.y.left = element_text(angle = 0, face = "bold", vjust = 1),
        strip.background = element_blank(),
        strip.placement = "outside",
        axis.title.y = element_blank())

enter image description here

ответь на свой вопрос?

...