#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)