2016-04-20 2 views
2

Мой основной вопрос: как настроить номер ячейки (по умолчанию 30) для geom_density.ggplot: сбив с толку о определенном пользователем номере ячейки в графике плотности

Я обнаружил, что плотность по оси Y не изменилась, даже если бин был изменен.

Вот пример:

values <- runif(1000, 1, 100) 
ind <- as.factor(rep(c(1:2), each=500)) 
inout <- as.factor(rep(c(1:2), each =500)) 
df <- data.frame(values,ind,inout) 

ggplot(df,aes(x=values, ..density..)) + 
    geom_freqpoly(aes(group=interaction(ind,inout), colour=factor(inout)), alpha=1, bins=1) 

Плотность должна быть 1, так как номер бен был определен до 1. Однако результат не показал, что я ожидал.

Знаете ли вы, что я здесь пропустил? Любые подсказки для определения номера ячейки или порога бина для ggplot geom_density?

Большое спасибо.

+0

У вас есть два ',' подряд перед 'bins = 1'. – bVa

+0

"," удален. Благодарю. –

ответ

0

В ggplot вы не устанавливаете количество ящиков как таковых, вместо этого вы устанавливаете ширину бункеров, используя binwidth (по умолчанию диапазон/30). bin - это не термин, который geom_freqpoly понимает, поэтому он игнорируется в вашем примере кода.

Я думаю, что пример, используя диапазон 0-1 (вместо 1-100) будет лучше проиллюстрировать то, что вы ожидали увидеть:

values <- runif(1000, 0, 1) # generate values between 0 and 1 
ind <- as.factor(rep(c(1:2), each=500)) 
inout <- as.factor(rep(c(1:2), each =500)) 
df <- data.frame(values,ind,inout) 

ggplot(df, aes(x=values, ..density..)) + 
    geom_freqpoly(aes(group=interaction(ind,inout), 
         colour=factor(inout)), alpha=1) #use default binwidth, i.e. 1/30 

Это дает график, похожий на то, что ваш код, сгенерированный

geom_freqpoly with default binwidth

с диапазоном 1, установка binwidth = 1 означает, что будет один бин, который даст плотность 1 при значении 0,5. Обратите внимание, что в настоящее время диапазон значений от 0,5 до 1,5, как площадь под кривой плотности всегда должна быть равна 1.

ggplot(df, aes(x=values, ..density..)) + 
    geom_freqpoly(aes(group=interaction(ind,inout), 
         colour=factor(inout)), alpha=1, binwidth = 1) #binwidth = 1 

geom_freqpoly with binwidth set to 1

Если увеличить количество точек вы случайным образом и уменьшить binwidth (например, попробуйте 0.1, 0.01, 0.001 и т. д.), вы приблизитесь к «квадратичной» функции плотности вероятности, которую вы ожидаете для равномерного распределения (например, as shown on wikipedia)