Joe King
Joe King

Reputation: 3021

colour of geom_bar

I am having trouble controlling the colour of barplots in ggplot

require(mice)
require(ggplot2)
impute <- mice(nhanes, seed = 101)
ldt <-complete(impute,"long", include=TRUE)
ldt$Imputed<-ifelse(ldt$".imp"==0,"Observed","Imputed")

ggplot(ldt[!is.na(ldt$hyp),], aes(x= factor(hyp), colour=Imputed)) + 
  geom_bar() + 
  facet_wrap(~.imp, nrow = 1) +
  scale_y_continuous(expand = c(0,0))

Which gives: enter image description here

But I would like the bars to be filled with the colour, so I tried:

ggplot(ldt[!is.na(ldt$hyp),], aes(x= factor(hyp))) + 
  geom_bar(colour = Imputed) + 
  facet_wrap(~.imp, nrow = 1) +
  scale_y_continuous(expand = c(0,0))

But this gives the error:

Error in do.call("layer", list(mapping = mapping, data = data, stat = stat,  : 
  object 'Imputed' not found

Upvotes: 1

Views: 963

Answers (2)

Matthew Plourde
Matthew Plourde

Reputation: 44614

Use fill=Imputed instead of colour=Imputed in your first attempt.

ggplot(ldt[!is.na(ldt$hyp),], aes(x= factor(hyp), fill=Imputed)) + 
  geom_bar() + 
  facet_wrap(~.imp, nrow = 1) +
  scale_y_continuous(expand = c(0,0))

You could set fill=Imputed in geom_bar instead, but you'd have to wrap it in a call to aes, as you would in the call to ggplot.

enter image description here

Upvotes: 2

BenBarnes
BenBarnes

Reputation: 19454

Instead of using colour = Imputed in the original aesthetic mapping, use fill = Imputed

ggplot(ldt[!is.na(ldt$hyp),], aes(x= factor(hyp), fill=Imputed)) + 
  geom_bar() + 
  facet_wrap(~.imp, nrow = 1) +
  scale_y_continuous(expand = c(0,0))

Upvotes: 2

Related Questions