2014-10-13 1 views
1

Все,Добавление заштрихованной области на гистограмме между квинтилях

я диаграмма, которая имеет 2 гистограммы, в которых я также нанесены линии, представляющие 20-й, 40-м, 60-й и 80-й процентили, код ниже воспроизводит аналогичную схему с соской данные

data <- rbind(data.frame(x=rnorm(1000,0,1),g="one"),data.frame(x=rnorm(1000,0.2,1.5),g="two")) 
q1 = melt(ddply(melt(data,id.vars="g"),.(g),summarise,q20=quantile(value,.2,na.rm=T), 
      q40=quantile(value,.4,na.rm=T),q60=quantile(value,.6,na.rm=T),q80=quantile(value,.8,na.rm=T))) 
ggplot(data,aes(x=x,fill=g))+ 
    geom_vline(data=q1,aes(xintercept=value,group=variable),linetype=2,color="black")+ 
    #stat_bin(aes(y=..count../sum(..count..)),binwidth=0.1,alpha=0.4,geom="bar")+ 
    geom_histogram(aes(y=..count../sum(..count..)),alpha=0.75,binwidth=0.1)+facet_grid(g~.)+theme_bw()+coord_cartesian(xlim=c(-3,3)) 

enter image description here

Я хочу добавить затененной области (возможно, в серый цвет) между 40 и 60-й линии, чтобы показать средний квинтиль - Я хотел бы, чтобы регион быть управляемые данными (я используя dataframe q1, который является данными deri ved и это приемлемо, я просто не хочу вводить значение вручную)

Как это можно сделать? Я не был в состоянии сделать это

спасибо за помощь

+0

У вас есть пример желаемых результатов? Как будет выглядеть этот «затененный регион»? – MrFlick

+0

Это поможет? http://stackoverflow.com/questions/3494593/shading-a-kernel-density-plot-between-two-points –

+0

MrFlick, у меня нет примера, поскольку у меня нет способа его генерировать, но на нижней диаграмме область между двумя средними пунктирными линиями (от примерно -0,2 до примерно 0,7) будет серым прозрачным прямоугольником (я могу закончить его сначала, чтобы гистограмма была выше) – user1617979

ответ

-1

После еще экспериментов, я был в состоянии решить эту проблему, используя следующий код

Что обманным geom_rect каким-то образом в том, что хочет создать х переменная (поэтому я переименовал q40 на q). Я не знаю, почему ggplot не нравится Xmin = Q40, но любит Xmax = q60

data <- rbind(data.frame(x=rnorm(1000,0,1),g="one"),data.frame(x=rnorm(1000,0.2,1.5),g="two")) 
q = ddply(melt(data,id.vars="g"),.(g),summarise,q20=quantile(value,.2,na.rm=T), 
      q40=quantile(value,.4,na.rm=T),q60=quantile(value,.6,na.rm=T),q80=quantile(value,.8,na.rm=T)) 
q1 = melt(q) 
names(q)[3] = 'x' 

ch <- ggplot(data,aes(x=x,fill=g))+ 
    geom_vline(data=q1,aes(xintercept=value,group=variable),linetype=2,color="black")+ 
    geom_histogram(aes(y=..density..),alpha=0.75,binwidth=0.1)+facet_grid(g~.)+theme_bw()+coord_cartesian(xlim=c(-3,3))+ 
    coord_cartesian(ylim=c(0,0.5))++geom_rect(data=q,aes(xmin=x,xmax=x1,ymin=0,ymax=.5,group=g),fill="gray",alpha=0.1) 
ch 

enter image description here

+0

Помимо отсутствия читаемости ваш код неисправен и даже после ошибок исправления не создает отображаемый график. Вы должны исправить это. – jaySf

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