user13317 - 1 month ago 6x
R Question

# Double inequality in ggplot2 facet label

How does one put a double inequality into a facet label in ggplot2?

``````#Fake some data
x = seq(1,100,length.out=100)

#Relationship with beta for model y = a*x^b
alpha = 0.5
beta1 = -0.1
beta2 = 0.01
beta3 = 3

#Fitted values
y1 = alpha*x^beta1
y2 = alpha*x^beta2
y3 = alpha*x^beta3

#Create a data frame
df = data.frame(x=rep(x,3),y=c(y1,y2,y3),type=rep(c('beta < 0','0 < beta < 1','beta > 1'),each=100))

#Ggplot it up
ggplot(data=df,aes(x=x,y=y)) + geom_line() + facet_wrap(~type,labeller=label_parsed,scales='free_y')
``````

However, this fails and I get the following error

``````Error in parse(text = as.character(values)) :
<text>:1:9: unexpected input
1: 0 < beta
``````

How to get around this?

You can split the label with double quotes around the first part with an asterisk much like in this answer.

The label in question then looks like:

``````'"0 < "*beta < 1'
``````

If you want the result in a specific order, you will likely need to order the factor `type`.

``````df = data.frame(x=rep(x,3),y=c(y1,y2,y3),
type=rep(c('beta < 0','"0 < "*beta < 1','beta > 1'), each=100))
df\$type = factor(df\$type, levels = unique(df\$type))

ggplot(data=df,aes(x=x,y=y)) + geom_line() +
facet_wrap(~type, labeller=label_parsed, scales='free_y')
``````

Source (Stackoverflow)