Гистограммы и графики плотности не совпадают

Я создаю гистограммы замен: 1-я, 2-я или 3-я замена по времени. Таким образом, каждая гистограмма показывает количество подписчиков в данную минуту с учетом номера подписки. Гистограммы имеют смысл для меня, потому что по большей части они гладкие (я использовал ширину ячейки 1 минуту). Ничто не выглядит слишком необычным. Однако, когда я накладываю график плотности, хвосты слева раздуваются, и я не могу определить, почему для одного из графиков.

Набор данных состоит из замен, начиная с минуты 1 и заканчивая максимальным временем. Затем я разрезал этот набор данных пополам, чтобы посмотреть только, когда сабвуфер был сделан после 45-й минуты. Я не сворачивал эти данные и пытался создать воспроизводимый пример, но не могу предоставить данные.

Код, используемый для создания в R

## Filter out subs that are not in the second half
df.half<-df[df$PeriodId>=2,]
p<-ggplot(data=df.half, aes(x=time)) + 
  geom_histogram(aes(y=..density..),position="identity", alpha=0.5,binwidth=1)+
  geom_vline(data=sumy.df.half,aes(xintercept=grp.mean),color="blue", linetype="dashed", size=1)+
  geom_density(alpha=.2)+
  facet_grid(SUB_NUMBER ~ .)+
  scale_y_continuous(limits = c(0,0.075),breaks = c(seq(0,0.075,0.025)),
                     minor_breaks = c(seq(0,0.075,0.025)),name='Count')
p

Почему для First Sub график плотности раздувается в хвосте, если нет значений меньше 45? Кроме того, почему график плотности не более раздут в хвосте второго сабвуфера?

Боковое примечание: я задал этот вопрос на перекрестной проверке, но мне сказали, поскольку он касается R, вместо этого задать его здесь. Здесь

введите здесь описание изображения

Поэтому я смог изменить код и получить следующее:

ggplot() + 
  geom_histogram(data=df.half, aes(x=time,y=..density..),position="identity", alpha=0.5,binwidth=1)+
  geom_density(data=df.half,aes(x=time,y=..density..))+
  geom_vline(data=sumy.df.half,aes(xintercept=grp.mean),color="blue", linetype="dashed", size=1)+
  facet_grid(SUB_NUMBER ~ .)

введите здесь описание изображения

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


person Jack Armstrong    schedule 10.04.2019    source источник
comment
Будет ли ошибка сохраняться, если вы переместите кодовую строку, указывающую плотность, сразу после geom_histogram?   -  person Oka    schedule 10.04.2019


Ответы (1)


Хотя выборки данных для воспроизведения ошибки нет, вы можете попытаться убедиться, что среда, используемая geom_density, верна, указав ее явно. Вы также можете попробовать переместить строку кода, указывающую плотность (geom_density), сразу после строки geom_histogram. Кроме того, метка оси y, вероятно, неверна — теперь она установлена ​​как counts, а значения предполагают, что на самом деле это density.

Как указать плотность явно?

Вы можете указать параметры плотности явно, указав data, aes и position непосредственно в вызове функции geom_density, чтобы он использовал эти указанные вместо унаследованных аргументов:

ggplot() + 
  geom_histogram(data=df.half, aes(x=time,y=..density..),position="identity", alpha=0.5,binwidth=1)+
  geom_density(data=df.half,aes(x=time,y=..density..))+
  geom_vline(data=sumy.df.half,aes(xintercept=grp.mean),color="blue", linetype="dashed", size=1)+
  facet_grid(SUB_NUMBER ~ .)

Я вообще не понимаю, как это произошло Я думаю, что в исходном коде для geom_density вы явно указали только аргумент alpha. Таким образом, для всех остальных необходимых параметров (data, aes, position и т. д.) он использовал унаследованные аргументы/параметры и, по-видимому, не унаследовал их правильно. Вероятно, он пытался использовать аргумент данных из функции geom_vline - sumy.df.half или был сбит с толку синтаксисом в аргументе "..density.."

person Oka    schedule 10.04.2019
comment
Как бы я указал плотность явно? - person Jack Armstrong; 10.04.2019
comment
указав data, aes и position непосредственно в вызове функции, чтобы он использовал эти указанные вместо унаследованных аргументов (потому что я не уверен, что он правильно использует унаследованные параметры) - person Oka; 10.04.2019
comment
Что вы имеете в виду, указывая их непосредственно в вызове функции? - person Jack Armstrong; 10.04.2019
comment
Я имею в виду строку кода, в которой вы указываете параметры geom_density — geom_density(). Теперь вы явно указываете только alpha. - person Oka; 10.04.2019
comment
Я думаю так. Я добавил новый код и новый график выше. Это имеет больше смысла, но я не понимаю, как это произошло в первую очередь. - person Jack Armstrong; 11.04.2019
comment
@JackArmstrong Круто. Я добавил некоторые пояснения к ответу. - person Oka; 11.04.2019