заполнить заднюю группу двумя разными цветами в ggplot2

test<-data.frame(a=c('1','1','2','2'),b=c(2,-2,4,-3),d=c('m','n','m','n')) 
p+geom_bar(position=position_dodge(),stat='identity',fill='deeppink',colour='black',width=0.5)

введите здесь описание изображения

У меня есть гистограмма, я бы хотел заполнить заднюю группу графика двумя разными цветами в зависимости от значений b (> 0 и ‹ 0) или коэффициента d (m и n) в данных.

Возможно ли это в ggplot2?


person user36102    schedule 25.01.2014    source источник


Ответы (2)


РЕДАКТИРОВАТЬ: Неправильно понятый вопрос OP --- Используя панели и geom_rect, вы можете в некоторой степени приблизиться к тому, что хотите. Может потребоваться дополнительная настройка, но в идеале у вас должны быть свои собственные идеи. См. здесь аналогичный вопрос: Условное форматирование фона панели в GGplot2

EDIT2: введена другая переменная (панель), поэтому огранка больше не происходит на основе b и выглядит лучше

require(ggplot2)
test<-data.frame(a=c('1','1','2','2'),b=c(2,-2,4,-3),d=c('m','n','m','n')) 
x <- rep(seq(1,2),2)
test$panel <- x
test$colorindicator = ifelse(test$b<0,"negative","positive")
p=ggplot(data=test,aes(x=a,y=b))
p = p + geom_rect(aes(fill = colorindicator), xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = Inf, alpha = 1) 
p = p + geom_bar(fill='deeppink',color="black",position=position_dodge(),stat='identity',width=0.5)
p = p + facet_grid(.~panel,scales="free")
print(p)

введите здесь описание изображения

person CMichael    schedule 25.01.2014
comment
спасибо за ваш ответ. но я хотел бы изменить цвет задней группы сюжета, а не цвет заливки полосы. - person user36102; 25.01.2014

@CМайкл, большое спасибо. из вашего ответа я получил именно то, что хочу после небольшой модификации.

require(ggplot2)
test<-data.frame(a=c('1','1','2','2'),b=c(2,-2,4,-3),d=c('m','n','m','n')) 
p=ggplot(data=test,aes(x=a,y=b))
p = p + geom_rect(fill = 'red', xmin = -Inf, xmax = Inf, ymin =0, ymax = Inf, alpha =0.05) 
p = p + geom_rect(fill = 'green', xmin = -Inf, xmax = Inf, ymin =-Inf, ymax = 0, alpha =0.05)
p = p + geom_bar(fill='deeppink',color="black",position=position_dodge(),stat='identity',width=0.5) 
print (p)

введите здесь описание изображения

person user36102    schedule 26.01.2014