Гистограмма, возрастающая по группе с частично масштабированной осью y в R

#r #ggplot2 #bar-chart

#r #ggplot2 #гистограмма

Вопрос:

У меня есть фрейм данных, подобный следующему:

 group <- c("A", "A", "B","B","B","C","B","A","B","B","C","B","B","C","B","B","B","B","B","C")
name <- c("nam1","nam2","nam3","nam4","nam5","nam6","nam7","nam8","nam9","nam10","nam11","nam12","nam13","nam14","nam15","nam16","nam17","nam18","nam19","nam20")
obs <- c(7500,950,450,160,150,220,110,60,40,40,40,15,15,15,10,10,10,10,10,10)
stud <- c(10,2,3,5,6,2,2,2,2,1,2,2,2,3,2,2,2,2,1,1)
df <- data.frame(group,name,obs,stud)
 

Мне нужно сделать гистограмму, чтобы показать количество obs для каждого имени, с количеством стержней в верхней части каждого столбца и с столбцами, расположенными в порядке возрастания по группам.

Вот что я сделал:

 ggbarplot(df, x = "name", y = "obs",
          fill = "group",               
          color = "white",            
          palette = "jco",            
          x.text.angle = 90,           
          label = stud, label.pos="out", lab.size = 3, order = c("nam20","nam14","nam11","nam6","nam19","nam18","nam17","nam16","nam15","nam13","nam12","nam10","nam9","nam7","nam5","nam4","nam3","nam8","nam2","nam1"),
          xlab = "name",
          ylab = "obs")
 

и я получил это:

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

Теперь мне нужно свернуть ось y только для значений obs выше, скажем, 500, чтобы сделать более заметными все столбцы, даже те, которые соответствуют меньшим значениям obs.

Заранее спасибо.

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

1. Почему бы не использовать логарифмическую шкалу? добавить ` scale_y_log10()`

Ответ №1:

Пара вариантов: попробуйте scale_y_log10 или ggbreak::scale_y_break

Вам придется поиграть с функциями или другими ggplot аргументами для точной настройки, чтобы получить нужный вам внешний вид.

 library(ggpubr)
library(ggplot2)
library(ggbreak)

ggbarplot(df, x = "name", y = "obs",
          fill = "group",               
          color = "white",            
          palette = "jco",            
          x.text.angle = 90,           
          label = stud, label.pos="out", lab.size = 3, order = c("nam20","nam14","nam11","nam6","nam19","nam18","nam17","nam16","nam15","nam13","nam12","nam10","nam9","nam7","nam5","nam4","nam3","nam8","nam2","nam1"),
          xlab = "name",
          ylab = "obs",
          title = "Log scale")   
  scale_y_log10()
 

 
ggbarplot(df, x = "name", y = "obs",
          fill = "group",               
          color = "white",            
          palette = "jco",            
          x.text.angle = 90,           
          label = stud, label.pos="out", lab.size = 3, order = c("nam20","nam14","nam11","nam6","nam19","nam18","nam17","nam16","nam15","nam13","nam12","nam10","nam9","nam7","nam5","nam4","nam3","nam8","nam2","nam1"),
          xlab = "name",
          ylab = "obs",
          title = "ggbreak")  
  scale_y_continuous(limits = c(0, 7600)) 
  scale_y_break(c(1000, 7200), scales = 0.3)
 

Создано 2021-12-11 пакетом reprex (версия v2.0.1)