Как я могу построить гистограмму с переменной шириной бина в ggplot? - PullRequest
4 голосов
/ 01 апреля 2011

Я нашел функцию dhist() в пакете ggplot2, который реализует гистограмму переменной ширины, описанную Denby and Mallows (2009) , но я не могу найти никаких примеров ее использования.Я хотел бы использовать его со следующим кодом для создания переменной ширины бина:

x1 <- c(rep(0, 250), rlnorm (1000)) 
x2 <- c(rlnorm(1250)) 
x <- data.frame(x1, x2) 
x.long <- melt(x, measure.vars=c("x1","x2")) 
ggplot(x.long, aes(x=value)) + 
 geom_step(aes(x=value, y=..density.., colour=variable), 
   stat="bin", binwidth=0.2) + 
 coord_cartesian(xlim = c(-1, 15)) 

Как я могу это сделать?

примечание: Я опубликовал этот вопрос в группе Google 1011 * ggplot2 , на которую он не получил ответа.Если я получу ответ здесь, опубликую там, и наоборот

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011

Вот и все, благодаря подсказке от Хэдли и большому количеству проб и ошибок. Я также изменил данные и количество бинов (nbins), чтобы эффект был более заметным.

library(ggplot2) #using version 0.8.8
x1 <- c(rnorm(100,8,4), rnorm(100, 2,2), rnorm(100,0,10))
x2 <- c(rlnorm(1000),rnorm(1000,1,10), rep(1,500), rep(5,500))
ggplot() + 
  geom_step(aes(x1, y =..density..),
            stat = 'bin',breaks = dhist(x1, nbins =20),
            position = "dodge", color = 'red') +
  geom_step(aes(x2, y =..density..),
            stat = 'bin',breaks = dhist(x2,nbins=20),
            position = "dodge", color = 'blue') 

enter image description here

1 голос
/ 01 апреля 2011

Вы можете явно указать x значения для geom_step.

t <- seq_len(1250) #your x coords, choose something more interesting
x <- data.frame(t, x1, x2)  #notice 
x.long <- melt(x, measure.vars=c("x1","x2")) 

ggplot(x.long) + 
  geom_step(aes(x=t, y=value, colour=variable)) + 
  coord_cartesian(xlim = c(-1, 15))     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...