Наложение гистограммы с различными y-шкалами - PullRequest
0 голосов
/ 11 февраля 2020

Я борюсь со следующей проблемой:

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

Я сообщаю ниже код, который я использовал в данный момент, и результат.

Заранее спасибо!


ggplot(data,aes(x= x ,group=class,fill=class)) + geom_histogram(position="identity",
  alpha=0.5, bins = 20)+ theme_bw() 

Plot

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Рассмотрим следующую ситуацию, когда у вас есть 800 против 200 наблюдений:

library(ggplot2)

df <- data.frame(
  x = rnorm(1000, rep(c(1, 2), c(800, 200))),
  class = rep(c("A", "B"), c(800, 200))
)

ggplot(df, aes(x, fill = class)) +
  geom_histogram(bins = 20, position = "identity", alpha = 0.5,
  # Note that y = stat(count) is the default behaviour
                 mapping = aes(y = stat(count)))

enter image description here

Вы можете масштабировать счет для каждой группы до максимума 1 с помощью y = stat(ncount):

ggplot(df, aes(x, fill = class)) +
  geom_histogram(bins = 20, position = "identity", alpha = 0.5,
                 mapping = aes(y = stat(ncount)))

enter image description here

В качестве альтернативы, вы можете установить y = stat(density), чтобы общая площадь интегрировалась в 1.

ggplot(df, aes(x, fill = class)) +
  geom_histogram(bins = 20, position = "identity", alpha = 0.5,
                 mapping = aes(y = stat(density)))

enter image description here

Обратите внимание, что после ggplot 3.3.0 stat() вероятно будет заменено на after_stat().

0 голосов
/ 11 февраля 2020

Как насчет сравнения их рядом с гранями?

ggplot(data,aes(x= x ,group=class,fill=class)) +
  geom_histogram(position="identity",
                 alpha=0.5,
                 bins = 20) +
  theme_bw() +
  facet_wrap(~class, scales = "free_y")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...