Гистограммы и графики плотности не совпадают - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю гистограммы замен: 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

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

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

enter image description here

Таким образом, я смог изменить код и получить следующее:

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 ~ .)

enter image description here

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

1 Ответ

1 голос
/ 10 апреля 2019

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

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

Вы можете явно указать параметры плотности, указав 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 .."

...