Да, но вы должны выбрать правильный масштабный коэффициент. Поскольку вы не предоставляете никаких данных, я проиллюстрирую их встроенными данными радужной оболочки.
H = hist(iris$Sepal.Width, main="")
Поскольку высоты представляют собой счетчики частоты, сумма высот должна равняться количеству точек, равных nrow (радужной оболочке). Площадь под кривой (прямоугольники) представляет собой сумму высот, умноженную на ширину прямоугольников, поэтому
Area = nrow(iris) * (H$breaks[2] - H$breaks[1])
В этом случае она равна 150 * 0,2 = 30, но лучше сохранить ее какформула.
Теперь область под стандартной кривой плотности равна единице, поэтому масштабный коэффициент, который мы хотим использовать, равен nrow(iris) * (H$breaks[2] - H$breaks[1])
, чтобы сделать области одинаковыми. Где вы применяете масштабный коэффициент?
DENS = density(iris$Sepal.Width)
str(DENS)
List of 7
$ x : num [1:512] 1.63 1.64 1.64 1.65 1.65 ...
$ y : num [1:512] 0.000244 0.000283 0.000329 0.000379 0.000436 ...
$ bw : num 0.123
$ n : int 150
$ call : language density.default(x = iris$Sepal.Width)
$ data.name: chr "iris$Sepal.Width"
$ has.na : logi FALSE
Мы хотим масштабировать значения y для графика плотности, поэтому мы используем:
DENS$y = DENS$y * nrow(iris) * (H$breaks[2] - H$breaks[1])
и добавляем линию к гистограмме
lines(DENS)
Вы можете сделать это немного лучше, настроив полосу пропускания для расчета плотности
H = hist(iris$Sepal.Width, main="")
DENS = density(iris$Sepal.Width, adjust=0.7)
DENS$y = DENS$y * nrow(iris) * (H$breaks[2] - H$breaks[1])
lines(DENS)