5

I have created the plot below with these commands:

ggplot(long.data, aes(owner,value)) + stat_summary(fun.y=mean,geom="bar",
       fill=c("deepskyblue","deepskyblue4")) + 
       stat_summary(fun.data=mean_cl_normal,geom="errorbar",position=
       position_dodge(width=.90),width=.1) +
       labs(x="",y="") + facet_grid(IV~experiment+type,scales="free_y") + 
       theme(strip.text.y = element_text(colour = 'red4'))

If I want to change the text color (and possibly also the background color) for only the upper x facet (in this case 'Implicit' and 'Explicit' levels), how can I do that? Is it possible? I have not read nothing about that in the ggplot2 documentation.

plot

EDIT: I'm sorry for the confusion. My aim is to change the text and background color of one of the upper strips, not the color of the facet.

Andry
  • 16,172
  • 27
  • 138
  • 246
this.is.not.a.nick
  • 2,631
  • 3
  • 21
  • 26
  • Doing background is certainly feasible; see [this](http://stackoverflow.com/questions/10267583/programmatically-specifying-colours-in-scale-fill-manual-ggplot-call) question. Text can be handled similarly by adding a variable for colour. – SlowLearner Apr 24 '13 at 13:15
  • Yes, in the link you posted the problem was to change the background of the full graph. I want to change the text color (and the background) for only one of the facet labels. – this.is.not.a.nick Apr 24 '13 at 13:29
  • I have done that, I think by setting the variable for the facets I did not want coloured to `NULL`. Have a careful read and you should get it. – SlowLearner Apr 24 '13 at 13:31
  • @SlowLearner I have carefully read the post, but nothing. Adding a color variable does not work for me. Basically, what I want to do is to use `strip.text.x=element_text(color="red")` only for the Implicit/Explicit labels, and not foe the Body/Objects label. – this.is.not.a.nick Apr 24 '13 at 15:24
  • I'm afraid I don't understand what it is you want. You said you want to change the "upper x facet"? If not the facet, what is it that you want to change? – SlowLearner Apr 24 '13 at 21:03
  • Sorry, not the facets, but the labels (and possibly the background) of one of the two upper strips, specifically the Implicit/Explicit strip. Is it possible? – this.is.not.a.nick Apr 25 '13 at 06:49

2 Answers2

6

You want to change the attributes of the strip element, not the facet. Try something like the code below. Note that this is a minimal example based on fake data made up at random, as you did not provide your own data for us to work with. You'll have to adapt the code to your needs.

require(reshape)
require(ggplot2)
require(scales)

# fake data
mydf <- data.frame(val1 = runif(10, 0, 1), val2 = runif(10, 0, 1))
mydf

# reshape to long format
long.data <- melt(mydf)
long.data$facetvar <- "implicit"
long.data$facetvar[seq(1, 19, 2)] <- "explicit"
long.data

# plot
ggplot(long.data, aes(y = value, x = variable)) +
    geom_bar(position = 'dodge', stat = "identity") +
    facet_wrap (~ facetvar) +
    theme(strip.background = element_rect(fill = alpha('green', 0.3))) +
    theme(strip.text.x = element_text(colour = 'blue', size = 10))

This produces a plot like this: screenshot

Please note that you have waited quite a while (by the standards of the R community on Stack Overflow) for an answer because your question wasn't clear and because you didn't provide fully reproducible code and data that we can copy and paste into our own R installations. If you had done that, somebody far more knowledgeable than myself would have answered this question within an hour. Please see this very useful post for tips on how to ask your next question.

Community
  • 1
  • 1
SlowLearner
  • 7,907
  • 11
  • 49
  • 80
  • Thanks for your answer. In my case, I have two upper strips (so two factors), and I want to change the color for only one of them. So the strip Implicit/Explicit would be (say) red, and the strip Body/Objects would be (say) orange. Can `strip.text.x` work for selected strips? – this.is.not.a.nick Apr 25 '13 at 07:54
  • 1
    I don't know. Have you tried yet? As I don't have your data (or 'fake' data arranged in the same way as your real data) I can't experiment without a lot of guesswork and inconvenience on my part. This is a classic example of why you should include data. My advice is to try and see. – SlowLearner Apr 25 '13 at 08:09
4

I get a warning... but this seems a good starting point for a more elegant solution:

ggplot(mtcars) + geom_rect(data = subset(mtcars, cyl == 4), aes(fill = cyl),xmin = -inf,xmax = Inf, ymin = -Inf,ymax = Inf, alpha = 0.05) +
  geom_point(aes(mpg, wt)) +  facet_grid(. ~ cyl)

enter image description here

Michele
  • 8,563
  • 6
  • 45
  • 72
  • Maybe I was not very clear in my explanation, so I apologize with you for that. Baically, my aim is to make the words 'Implicit' and 'Explicit' in (say) red color, and possible also make the relative background color from gray to (say) orange. – this.is.not.a.nick Apr 24 '13 at 13:28
  • @this.is.not.a.nick since you already did that for the vertical labels (making them red) I guess you want something different that I didn't get yet, sorry about that. – Michele Apr 24 '13 at 13:34