I try to connect jittered points between measurements from two different methods (measure) on an x-axis. These measurements are linked to one another by the probands (a), that can be separated into two main groups, patients (pat) and controls (ctr),
My df is like that:
The big issue you are having is that you are dodging the points by only
group but the lines are being dodged by
a, as well.
To keep your lines with the axes as is, one option is to manually dodge your data. This takes advantage of factors being integers under the hood, moving one level of
group to the right and the other to the left.
df = transform(df, dmeasure = ifelse(group == "ctr", as.numeric(measure) - .25, as.numeric(measure) + .25 ) )
You can then make a plot with
measure as the x axis but then use the "dodged" variable as the x axis variable in
ggplot(df, aes(x = measure, y = value) ) + geom_blank() + geom_point( aes(x = dmeasure), shape = 1 ) + geom_line( aes(group = a, x = dmeasure) )
If you also want jittering, that can also be added manually to both you x and y variables.
df = transform(df, dmeasure = ifelse(group == "ctr", jitter(as.numeric(measure) - .25, .1), jitter(as.numeric(measure) + .25, .1) ), jvalue = jitter(value, amount = .1) ) ggplot(df, aes(x = measure, y = jvalue) ) + geom_blank() + geom_point( aes(x = dmeasure), shape = 1 ) + geom_line( aes(group = a, x = dmeasure) )