Нарисуйте гистограммы с двумя группирующими переменными - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь нарисовать гистограммы для данных с двумя группирующими переменными, каждая из которых имеет два уровня, используя ggplot2. Я хочу установить одну из переменных группировки на fill (и group), а другую на facet .
. И я хочу, чтобы на оси y отображался процент относительно каждой заливки как хорошо, как каждый аспект.

Моей первой идеей было обобщить данные и использовать geom_bar, например:

df <- tibble(
  x=round(rnorm(1:1000)*5, 0),
  fill=rep(c("a", "b"), 500),
  facet=c(rep("x", 500), rep("y", 500))
)
df %>% group_by(fill, facet, x) %>% summarize(n=n()) %>% mutate(n=n/sum(n)) %>%
  ggplot(aes(x=x, y=n, group=fill, fill=fill)) +
  geom_bar(stat="identity", position="dodge2") +
  facet_wrap(~ facet)

, который создал этот график.

enter image description here

Однако, поскольку в этом случае изменение размера корзины проблематично, я бы хотел использовать geom_histogram.

Тогда я нашел этот вопрос: Как построить граненую гистограмму (не гистограммы) с процентами относительно каждого фасета?
и придумал следующий код:

df %>%
  ggplot(aes(
    x=x,
    y=stat(count/tapply(count, list(fill, PANEL), sum)[fill, PANEL]),
    group=fill,
    fill=fill)) +
  geom_histogram(binwidth=1, position="dodge2") + facet_wrap(~ facet)

Но я получил ошибку: Error in unit(x, default.units) : 'x' and 'units' must have length > 0.

Есть ли какие-нибудь хорошие способы решить проблему?
Заранее спасибо за помощь!

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