У меня есть набор данных, и мне нужно построить гистограмму подсчета различных результатов определенного столбца.Для этого примера я использую набор данных mtcars.
Когда я впервые попытался это сделать, я обнаружил, что надписи на столбиках обрезались сверху, поэтому я использовал аргумент expand_limits, чтобы дать им больше места.Поскольку я хочу использовать этот код для обновления данных, ограничения могут измениться, поэтому я использовал функцию max ().
mtcars_cyl_counts <- as.data.frame(table(mtcars$cyl))
colnames(mtcars_cyl_counts)[1:2] <- c("cyl", "counts")
mtcars_cyl_counts %>%
arrange(desc(counts)) %>%
ggplot(aes(x = reorder(cyl, -counts), y = counts)) +
geom_bar(stat = "identity") +
geom_text(aes(label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((mtcars_cyl_counts$counts) * 1.05))
Это прекрасно работает, но создание отдельной таблицы отсчетов казалось излишне громоздким и усложнило некоторые части будущего кода, поэтому я переделал это:
mtcars %>%
group_by(cyl) %>%
summarize(counts = n()) %>%
arrange(-counts) %>%
mutate(cyl = factor(cyl, cyl)) %>%
ggplot() +
geom_bar(aes(x = cyl, y = counts), stat = "identity") +
geom_text(aes(x = cyl, y = counts, label = comma(counts), vjust = -0.5), size = 3) +
expand_limits(y = max((counts) * 1.05))
Однако это возвращает следующую ошибку:
Ошибка в data.frame (..., stringsAsFactors = FALSE): объект 'counts' не найден
Я понял, что«counts» технически отсутствует в наборе данных mtcars (поэтому он также не работает, если я использую mtcars $ counts), но это то, что я использовал в других местах кода для определения y.
Итак, есть ли способ написать это так, чтобы он работал, или альтернативный способ расширить вертикальные пределы таким образом, чтобы он адаптировался к различным наборам данных?
(NB: с этимиНапример, метки не обрезаются, потому что они не очень большие, но для этого мне просто нужно расширить пределы, чтобы детали не были критически важны для работы ...)