2015-05-20 4 views
5

Мне нужно построить взвешенную гистограмму плотности, а не частоту. Я знаю, что freq = FALSE доступен в hist(), но вы не можете указать вес. В ggplot2 я могу это сделать:Гистограмма с весами в R

library(ggplot2) 
w <- seq(1,1000) 
w <-w/sum(w) 
v <- sort(runif(1000)) 

foo <- data.frame(v, w) 

ggplot(foo, aes(v, weight = w)) + geom_histogram() 

Но где эквивалент freq = FALSE?

+0

@ALexA. ho, я бы установил fre = F и не null, который является значением по умолчанию в hist() – heinheo

+0

Возможный дубликат [Создать гистограмму для взвешенных значений] (https://stackoverflow.com/questions/19841204/create-a-histogram -для-взвешенных значений) –

ответ

3

По умолчанию geom_histogram() будет использовать частоту, а не плотность по оси y. Тем не менее, вы можете изменить это, установив y эстетику в ..density.. так:

ggplot(foo, aes(x = v, y = ..density.., weight = w)) + geom_histogram() 

Это даст взвешенную гистограмму v с плотностью на оси у.

weighted_density_histogram

Вы также можете сделать это с freq аргументом в weighted.hist() из plotrix пакета:

library(plotrix) 
with(foo, weighted.hist(v, w, freq = FALSE)) 

plotrix

Смежные вопросы