ggplot2: гистограмма необработанных данных с рамкой вокруг агрегированной - PullRequest
2 голосов
/ 14 июня 2019

Я пытаюсь создать столбчатую диаграмму с накоплением из необработанных данных, где каждый набор переменных факторов может иметь несколько записей, а значения y должны быть суммой всех таких записей.Выполнение обычного geom_bar на первый взгляд выглядит хорошо, но кажется, что каждая исходная запись отображается в виде отдельного прямоугольника, сложенного друг на друга.Это выглядит нормально, пока вы не захотите нарисовать рамку вокруг каждой части гистограммы:

library(tidyverse)
data = tibble(
    age = factor(c(2, 3, 3, 3, 2, 2)),
    value = c(30, 5, 15, 14, 29, 9)
)
ggplot(data, aes(x = "Observation", y = value, fill = age)) +
    geom_bar(stat = "identity", colour = "black")

enter image description here

То, что я на самом деле хочу, это один кадрвокруг бирюзы и один прямоугольник вокруг красных частей.Как я могу сделать это с ggplot напрямую?

Конечно, можно вручную вызвать суммирование:

ggplot(data %>% group_by(age) %>% summarize(value = sum(value)), 
  aes(x = "Observation", y = value, fill = age)) +
  geom_bar(stat = "identity", colour = "black")

enter image description here Но это необходимо отрегулировать для каждогоразличный выбор переменных осей, что будет непросто, так как я работаю с ~ 15 факторами измерений и должен создать десятки диаграмм с разными факторами переменных для каждой из осей (включая facet_grid).

Так что в идеале ggplot / geom_bar будет автоматически выполнять агрегацию, а затем выводить агрегированное значение, а не каждую отдельную запись в отдельности.Это возможно?

1 Ответ

3 голосов
/ 14 июня 2019

stat_summary() может обрабатывать эти типы сводок на лету.

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

ggplot(data, aes(x = "Observation", y = value, fill = age,)) +
  stat_summary(geom = "bar", fun.y = "sum", position = "stack")

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...