You need to reorder the factor levels of the column that contains those labels. Here is an example of reordering the factor levels of a data frame column using the fct_relevel() function from the forcats package. The levels start out in alphabetical order.
DF <- data.frame(ID = 1:4, FAC = factor(c("E","O","V","A")))
DF$FAC #levels are alphbetical
#> [1] E O V A
#> Levels: A E O V
DF$FAC <- forcats::fct_relevel(DF$FAC, "O", after = Inf)
DF$FAC #O is now at the end of the levels
#> [1] E O V A
#> Levels: A E V O
Sorry, I know I should provide reproducible data, but I can't because it is a phyloseq object. I'm using ggplot2 a lot and I can reorder as you mentioned but this does not work with me when using data of a phyloseq.
Looking at the documentation of the plot_composition() function, I see the parameters sample.sort and otu.sort. The description of sample.sort includes
sample.sort
Order samples. Various criteria are available:
NULL or 'none': No sorting
A single character string: indicate the metadata field to be used for ordering. Or: if this string
is found from the tax_table, then sort by the corresponding taxonomic group.
A character vector: sample IDs indicating the sample ordering.
'neatmap' Order samples based on the neatmap approach. See neatsort. By default, 'NMDS' method
with 'bray' distance is used. For other options, arrange the samples manually with the function.
The description of otu.sort says
Order taxa. Same options as for the sample.sort argument but instead of metadata, taxonomic table is
used. Also possible to sort by 'abundance'.
What happens if you set either sample.sort or otu.sort to equal c("Acidaminococcaceae", "Bacteroidaceae", "Enterobacteriaceae", "Lachnospiraceae", "Oscillospiraceae", "Ruminococcaceae", "Sutterellaceae", "Synergistaceae", "Tannerellaceae", "Veillonellaceae", "Other")
Obviously I'm guessing, having never used this function or worked with such data.