Использование expand_limits в ggplot, когда число не является столбцом в наборе данных (R) - PullRequest
0 голосов
/ 23 октября 2018

У меня есть набор данных, и мне нужно построить гистограмму подсчета различных результатов определенного столбца.Для этого примера я использую набор данных 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: с этимиНапример, метки не обрезаются, потому что они не очень большие, но для этого мне просто нужно расширить пределы, чтобы детали не были критически важны для работы ...)

1 Ответ

0 голосов
/ 23 октября 2018

Если это поможет Меган,

mtcars %>%
    count(cyl) %>% 
    arrange(-n) %>% 
    mutate(cyl = factor(cyl, cyl)) %>% 
    ggplot(aes(cyl, n)) +
    geom_text(vjust = -0.5, aes(label = n)) +
    geom_bar(stat = "identity") +
    expand_limits(y = max(table(mtcars$cyl) * 1.05))
...