How to make scatterplot with two categorical variables on x-axis in R
<p>I am trying to make a scatter-plot in R with two categorical variables on the x-axis. For a boxplot I know how to do this (see first part of code below), but somehow I cannot get it to work for a scatterplot. I have tried several things, but when I plot points they always overlap and don't show my second categorical variable anymore. Jitter doesn't work either since I want my categories to cluster and not to spread them out randomly. Does anyone know how to do this? Below you can find some sample data and some graphs I tried, including comments. The first graph gives me something similar to what I want, but then with a boxplot instead of scatterplot. The second graph gives a scatterplot (artificially creating numbers for the second categorical variable), but then I loose the labels for my second categorical variable and it plots both times in one space. </p>

<p>To make it even more complicated, I would also like to display a line for the mean value with all the scatterplots. Something similar to what is done in <a href="https://stackoverflow.com/questions/17807774/categorical-scatter-plot-with-mean-segments-using-ggplot2-in-r">Categorical scatter plot with mean segments using ggplot2 in R</a>. How can I add this?</p>

<p>Thanks for all your help!</p>

<pre><code>time = c(rep('t1',12),rep('t2',12))
Origin =  c(rep('I1B',4),rep('I1C',4),rep('J4A',4),rep('I1B',4),rep('I1C',4),rep('J4A',4))
LB_FR = runif(24)

df = data.frame(time,Origin,LB_FR)

#does not work with geom_point
ggplot(df, aes(x = time, y = LB_FR, fill = Origin)) + geom_boxplot() + ggtitle('LB_FR')

#create df_2 with numbers instead of categories for Origin
df_2 = df
for (r in 1:nrow(df)){
  if (df$Origin[r] == 'I1B') df_2[r,'OriginNr'] = 1
  if (df$Origin[r] == 'I1C') df_2[r,'OriginNr'] = 2
  if (df$Origin[r] == 'J4A') df_2[r,'OriginNr'] = 3
}

# indices for time
t1 = df_2$time=="t1"
t2 = df_2$time=="t2"

plot(df_2$OriginNr,df$LB_FR, 
     xlim = c(0,4), ylim = c(0,1), bty = 'n',
     main = 'LB_FR', ylab = 'Fraction remaining', xlab = 'Origin', type = 'n')
points(df_2$OriginNr[t1],df_2$LB_FR[t1],col='red')
points(df_2$OriginNr[t2],df_2$LB_FR[t2],col='blue')
legend(0.1,0.9,legend=c('month 0-6','month 6-12'),pch=1,col=c('red','blue'),bty='n',cex=1.2)
</code></pre>