I was trying to make a plot showing how many genes with functional annotations are present across my pipeline and connect the dots to show the connection between different boxplot and geom jitter. ![](https://hackmd.io/_uploads/HJZx4kQZ6.png) But then I got stuck where the lines wouldn't connect to the dots because the `position_jitter` was somehow different. ![](https://hackmd.io/_uploads/S1Yx4J7W6.png) The original code was: ```{R} tt %>% left_join(phylo %>% select(!NCBI_TaxID), by=c("Genome"="ID")) %>% filter(Order %in% c("Bacillales","Enterobacterales","Flavobacteriales")) %>% ggplot(aes(x=tool,y=n,col=Order,group=Genome))+ #geom_boxplot()+ geom_line(position = position_jitter(width = 0.25, seed = 123), col="gray80")+ geom_point(position = position_jitter(width = 0.25, seed = 123))+ theme_minimal()+ facet_wrap(~Order, scales = "free") ``` turns out the `geom_line` function sort the data to make sure it goes into one direction. It sorts the data by `x`, then `group` and if you have a `facet` it needs to go first. Correct code: ```{R} tt %>% left_join(phylo %>% select(!NCBI_TaxID), by=c("Genome"="ID")) %>% filter(Order %in% c("Bacillales","Enterobacterales","Flavobacteriales")) %>% mutate(tool=factor(tool, levels=c("All","Patric","Bakta","IMG","Prokka"))) %>% arrange(Order,Genome,tool) %>% ggplot(aes(x=tool,y=n,col=Order))+ geom_boxplot()+ geom_line(aes(group=Genome),position = position_jitter(width = 0.25, seed = 123), col="gray80")+ geom_point(aes(group=Genome),position = position_jitter(width = 0.25, seed = 123))+ theme_minimal()+ facet_wrap(~Order, scales = "free") ``` Final figure: ![](https://hackmd.io/_uploads/rJJ8rkQ-a.png) Error mentionned [here](https://github.com/tidyverse/ggplot2/issues/3535)