Наложить нормальную кривую на гистограмму в ggplot2 - PullRequest
1 голос
/ 21 апреля 2020

Я хочу построить гистограмму для вектора с именем «Dist», который имеет нормальное распределение, и наложить нормальную кривую на параметры для совокупности. Я нашел несколько сообщений в stackoverflow о том же topi c, но ни одного сообщения об ошибках, которые я получаю.

plot1 <-ggplot(data = dist) + 
  geom_histogram(mapping = aes(x = dist), fill="steelblue", colour="black", binwidth = 1) +
  ggtitle("Frequences")

enter image description here

I´ Мы пробовали несколько вещей для добавления нормальной кривой к предыдущему графику:

Сначала добавляем функцию к коду гистограммы с необходимыми значениями:

stat_function(fun = dnorm, args = list(mean = mu2, sd = sd2))

Но этот код не добавить что-нибудь к сюжету. Результат тот же, только гистограмма.

А также, создание кривой и добавление ее к графику.

#Create the curve data
x <- seq(8, 24, length.out=100)
y <- with(dist, data.frame(x = x, y = dnorm(x, mean(mu2), sd(sd2))))

#add the curve to the base plot
plot1 + geom_line(data = y, aes(x = x, y = y), color = "red")

Это дает мне следующее сообщение об ошибке:

Удалено 100 строк, содержащих пропущенные значения (geom_path).

Но я фактически не нахожу никаких удаленных или нулевых значений в векторе, поэтому я не уверен насчет Как это решить.

Я также могу сделать это без ggplot2 очень простым способом, хотя мне интересно сделать это в ggplot2:

hist(dist$dist, freq =FALSE, main="histogram")
curve(dnorm(x, mean = mu2, sd = sd2), from = 8, to = 24, add = TRUE)

1 Ответ

3 голосов
/ 21 апреля 2020

Я подозреваю, что stat_function действительно добавляет плотность нормального распределения. Но диапазон оси Y просто позволил ему полностью исчезнуть внизу графика. Если вы масштабируете свою гистограмму до плотности с aes(x = dist, y=..density..) вместо абсолютных значений, ваша кривая из dnorm должна стать видимой.

(Как примечание: ваше распределение не выглядит нормальным для меня. Вы можете хотите проверить, например, с помощью qqplot)

library(ggplot2)

dist = data.frame(dist = rnorm(100))

plot1 <-ggplot(data = dist) + 
  geom_histogram(mapping = aes(x = dist, y=..density..), fill="steelblue", colour="black", binwidth = 1) +
  ggtitle("Frequences") +
  stat_function(fun = dnorm, args = list(mean = mean(dist$dist), sd = sd(dist$dist)))

enter image description here

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