Возможная ошибка ggplot2: несовместимые нормализации наложенных гистограмм - PullRequest
0 голосов
/ 12 июня 2018

Недавно я случайно обнаружил странное поведение в ggplot2.Следующий код

N <- 1000
coin <- rep(c(0,1),N/2)
N1 <- sum(coin)
N0 <- sum(1-coin)
values <- rep(0,N)
values[coin==0] <- rnorm(N0,mean=0,sd=1)
values[coin==1] <- rnorm(N1,mean=0,sd=1)
dat = data.frame('Value'=values,'Category'=as.factor(coin))

создает набор данных с одним числовым столбцом и одним столбцом фактора с равным количеством событий, принадлежащих каждой из двух категорий:

> summary(dat)
     Value           Category
 Min.   :-3.901785   0:500   
 1st Qu.:-0.669807   1:500   
 Median : 0.020031           
 Mean   :-0.008229           
 3rd Qu.: 0.650803           
 Max.   : 3.195819   

Однако, когдаПри построении столбца «Значение» с разбивкой по категориям категория 1 выглядит гораздо более нормализованной, чем категория 0:

ggplot(dat,aes(x=Value,fill=Category)) + geom_histogram(alpha=0.5) + theme_bw()

enter image description here

Это выглядит очень странно.Ширина бинов для обеих гистограмм выглядит одинаковой, как и должно быть, но общее количество событий не равно, как должно быть.Гистограмма категории 0 фактически является гистограммой всего набора данных:

ggplot(dat,aes(x=Value)) + geom_histogram(alpha=0.5) + theme_bw()

enter image description here

Это ошибка ggplot2, или я делаю какую-то ошибкуЯ не заметил?(Я получаю то же самое, если я заменяю категории 0 и 1 на «A» и «B»).

Сведения о системе:

  • Mac OS X High Sierra
  • R версия 3.4.0 (2017-04-21)
  • ggplot2_2.2.1

1 Ответ

0 голосов
/ 12 июня 2018

geom_histogram по умолчанию ставит столбики друг на друга с помощью аргумента position="stack".Это полезно, чтобы увидеть общий состав и вклад каждой части одновременно, но не так полезно для непосредственного сравнения частей.Вы можете изменить это, изменив аргумент позиции на "identity", например:

ggplot(dat,aes(x=Value,fill=Category)) +
 geom_histogram(alpha=0.5, position="identity") + theme_bw()

Histogram using position=

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