2013-07-05 5 views
5

Как я могу построить гистограмму «шаг» или «лестница» в ggplot2 в R? что-то вроде:Как построить гистограммы в ggplot2 в R?

enter image description here

, где ширина каждой горизонтальной линии представляет размер бен (значения оси х), а высота соответствует фракции данных, который попадет в этом бункере (в отличие от прилагаемого изображение, где это плотность вероятности!). есть ли способ сделать это с помощью geom_histogram?

ответ

8

Сформировать некоторые данные:

foo <- data.frame(bar=rnorm(100)) 

Гистограмма с шагом и геометрией рассчитывает на осях у:

ggplot(foo,aes(x=bar)) + stat_bin(geom="step") 

гистограмма с шагом геометрией и плотностью на осях у:

ggplot(foo,aes(x=bar)) + stat_bin(aes(y=..density..),geom="step") 

И с «долей данных, который попадает в этот бункер»:

ggplot(foo,aes(x=bar)) + stat_bin(aes(y=..count../sum(..count..)),geom="step") 

enter image description here

2

Может быть, другие, более красивые способы сделать это, но вот одна идея.

foo <- data.frame(bar = rnorm(100)) + theme_bw() 
p <- ggplot(data = foo, aes(x = bar, y = ..count../sum(..count..))) ## or aes(x = bar, y = ..density..) if you want that 
p + geom_histogram(size = 2, colour = "red", fill = "white") + geom_histogram(colour = "transparent", fill = "white") 

enter image description here

Edit:

geom_histogram(size = 2, colour = "red", fill = "white") создает этот enter image description here

Я редактировал толщину контура для size = 2, чтобы сделать окончательный вывод хорошо выглядеть. На этом этапе это выглядит ужасно. Для того, чтобы удалить внутренние линии, добавляемые geom_histogram(colour = "transparent", fill = "white") который нарисует другую гистограмму на верхней охватывающее внутренние линии (и некоторые из набросков, поэтому я думаю, что size = 2 выглядит красиво)

+0

Не могли бы вы объяснить, почему есть два вызова 'geom_histogram'? – user248237dfsf

+0

@ user248237dfsf Просто удалите второй и посмотрите, что произойдет. Это должно быть очевидно. – Roland

+0

@Roland: Я вижу, что это попытка получить правильный цвет/степпинг ... но я не вижу, как обобщить это на случай, когда 'colour' установлен в переменную в df для кодирования разных условий , – user248237dfsf