Ordenação de múltiplas legendas / guias (qual é a lógica automática e como alterá-la?)

Eu me deparei com esse estranho comportamento com o ggplot2s ordenando legendas e simplesmente não consigo descobrir qual é a lógica por trás da colocação automática das legendas:

Meu objetivo: em um gráfico com várias escalas, quero organizá-las em uma ordem (temática) diferente da automática. Mas eu não consegui encontrar um comando em opts () ou guides () para fazer isso por mim. E só para deixar claro: não quero alterar os itens dentro das legendas, isso funciona bem, mas o arranjo de várias legendas completas.

Então, primeiro eu assumi que eles foram ordenados por tipo, ou seja, escala, cor etc. Mas esse não é o caso, a sua posição muda (veja abaixo).

Ordem alfabética? Não.

<code>    library(ggplot2) ## v0.9

    ## Scale_colour on top
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "A") + scale_colour_discrete(name = "B")

    ## Reverse names --> scale_colour on bottom
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "B") + scale_colour_discrete(name = "A")

    ## Change name B to C -->  scale_colour on bottom
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "C") + scale_colour_discrete(name = "A")

    ## Change name B to D -->  scale_colour on top
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
    scale_size(name = "D") + scale_colour_discrete(name = "A")
</code>

Posições adicionais de scale_colour (para nome de scale_size trocado)

"E": inferior"F" - "L": topo"M" - "N": inferior

e continua a aparecer no topo e na parte inferior.

Ordem fatorial? Não.

<code>    ## From top to bottom: C - B - A
    fname <- factor(c("A","B","C"), levels = c("A","B","C"))
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl) +
    scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])

    ## From top to bottom: B - C - A
    fname <- factor(c("A","B","C"), levels = c("C","B","A"))
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl) +
    scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])

    ## From top to bottom: B - C - A
    fname <- factor(c("A","B","C"), levels = c("B","C","A"))
    qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
    scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])
</code>

Comprimento do título? Não. Eu vou parar por agora com código de exemplo, mas esse também rendeu ordens flutuantes independente do tamanho do caractere.

Alguma ideia?

questionAnswers(1)

yourAnswerToTheQuestion