Постройте плотность и кумулятивную функцию плотности на одном комбинированном графике с помощью ggplot2

Хотелось бы получить график, сочетающий в себе плотность наблюдений и cdf.

Обычная проблема с этим состоит в том, что масштабы этих двух очень сильно различаются. Как это можно исправить, то есть использовать две шкалы или, в качестве альтернативы, масштабировать одну из серий данных (желательно в пределах ggplot, поскольку я хотел бы разделить вычисление и отображение данных).

Вот пока что код:

>dput(tmp) урожайность

structure(list(drivenkm = c(8, 11, 21, 4, 594, 179, 19, 7, 10, 36)), .Names = "drivenkm", class = c("data.table", "data.frame" ), row.names = c(NA, -10L), .internal.selfref = <pointer: 0x223cb78>)

тогда я делаю

p = ggplot(data = tmp, aes(x = drivenkm)) + geom_histogram(aes(y = ..density..), alpha = 0.2, binwidth = 3) + stat_ecdf(aes(x = drivenkm)); print(p)

Я получаю следующее:

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

Очевидно, что чаша весов далека. Как это можно исправить, чтобы как гистограмму, так и cdf можно было разумно интерпретировать?

Спасибо!


person Peter Lustig    schedule 14.01.2014    source источник


Ответы (1)


Плотность масштабируется по ширине бина, поэтому площадь равна 1. Таким образом, y для вашей гистограммы также следует умножить на это:

p = ggplot(data = tmp, aes(x = drivenkm)) +
   geom_histogram(aes(y = 3*..density..), alpha = 0.2, binwidth = 3) +
   stat_ecdf(aes(x = drivenkm))

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

person James    schedule 14.01.2014
comment
Спасибо за указатель с умножением. Я взял ..density.. из какого-то фрагмента SO, но так и не понял, что на самом деле означает этот синтаксис, и поэтому боялся прикоснуться к нему. - person Peter Lustig; 14.01.2014