R: График плотности с цветами по группам?

У меня есть данные из 2 групп населения. Я хотел бы получить гистограмму и график плотности обоих на одном графике. С одним цветом для одной популяции и другим цветом для другой.

Я пробовал это (пример):

library(ggplot2)
AA <- rnorm(100000, 70,20)
BB <- rnorm(100000,120,20)

valores <- c(AA,BB)
grupo <- c(rep("AA", 100000),c(rep("BB", 100000)))
todo <- data.frame(valores, grupo)


ggplot(todo, aes(x=valores, fill=grupo, color=grupo)) +
  geom_histogram(aes(y=..density..), binwidth=3)+  geom_density(aes(color=grupo))

Но я просто получаю графику с одной линией и одним цветом.

Я хотел бы иметь разные цвета для двух линий плотности. И, если возможно, гистограммы.

Я сделал это с ggplot2, но база R также будет в порядке.

или я не знаю, что я изменил, и теперь я получаю это:

ggplot(todo, aes(x=valores, fill=grupo, color=grupo)) + 
geom_histogram( position="identity", binwidth=3, alpha=0.5)+ 
geom_density(aes(color=grupo))

но линии плотности не были нанесены.

или даже странные вещи, такие как

Ответы на вопрос(2)

  hist(AA, probability = T, col = rgb(1,0,0,0.5), border = rgb(1,0,0,1), 
       xlim=range(AA,BB), breaks= 50, ylim=c(0,0.025), main="AA and BB", xlab = "")
  hist(BB, probability = T, col = rgb(0,0,1,0.5), border = rgb(0,0,1,1), add=T)
  lines(density(AA))
  lines(density(BB), lty=2)

Для альфы я использовалrgb, Но есть и другие способы получить его.alpha() вscales пакет например. Я добавил также параметр breaks для графика AA, чтобы увеличить ширину бина по сравнению с группой BB.

 Jimbou11 июл. 2016 г., 17:14
@skan посмотри мои правки.
 skan11 июл. 2016 г., 17:03
Как насчет просмотра гистограммы с альфа, как мой второй график, но также с наложенными линиями?
Решение Вопроса

ggplot(todo, aes(valores, color=grupo)) +
  geom_histogram(position="identity", binwidth=3, aes(y=..density.., fill=grupo),  alpha=0.5) +
  geom_density()

@skan: Ваша попытка была близка, но вы отразили частоты вместо значений плотности на гистограмме.

 skan11 июл. 2016 г., 17:20
И последнее, если я хочу добавить сюжет с помощью stat_function (fun = dnorm .....), чтобы добавить информацию о нормальном распределении средств .... Как вам удается получить правильное масштабирование y?
 skan11 июл. 2016 г., 17:17
Спасибо. Меня всегда смущает, где разместить аргумент aes (), внутри ggplot или внутри других терминов. Теперь, как я могу получить более толстые линии плотности?
 skan11 июл. 2016 г., 17:03
Как насчет просмотра гистограммы с альфа, как мой второй график, но также с наложенными линиями?
 M. A.11 июл. 2016 г., 17:30
Не могли бы вы выразить, что вы подразумеваете под «правильным масштабированием»?
 M. A.11 июл. 2016 г., 17:25
@skan Вы можете просто изменить ширину линии, установивgeom_density(size=1).
 skan11 июл. 2016 г., 17:54
Наконец, я собираюсь использовать что-то вроде этого: N <- 1000 AA <- rnorm (N, 70,20) BB <- rnorm (N, 100,20) grupo <- c (rep ("A", N) , c (rep ("B", N))) valores <- c (AA, BB) todo <- data.frame (valores, grupo) ggplot (todo, aes (valores, color = grupo)) + geom_histogram (position = "идентичность", binwidth = 5, aes (y = .. плотность .., заполнение = группа), альфа = 0.5) + geom_density (размер = 1.5) + theme_bw () + geom_vline (xintercept = c (70,100), цвет = c («красный», «синий»), размер = 1) + и добавить два небольших сегмента, чтобы легко показать стандартную ошибку средних
 skan11 июл. 2016 г., 17:53
Хорошо, не волнуйтесь, я выбрал ваш ответ, потому что вы ответили первыми, хотя теперь порядок изменился, я не знаю почему. Я хотел показать на том же графике также распределение выборочных средних, но мне нужно «искусственно» масштабировать их, чтобы получить более или менее одинаковые значения y max и правильно увидеть график.

Ваш ответ на вопрос