Mi sono imbattuto in questo comportamento strano con l'ordinamento delle leggende di ggplot2 e non riesco a capire quale sia la logica dietro il posizionamento automatico delle legende è:Ordinamento di più legende/guide (qual è la logica automatica e come modificarla?)
Il mio obiettivo: in un grafico con più scale, desidero sistemarli in un ordine diverso (tematico) rispetto a quello automatico. Ma non sono riuscito a trovare un comando in opts() o guides() per fare questo per me. E tanto per essere chiari: non voglio cambiare gli elementi all'interno delle legende, che funziona bene, ma la disposizione di più legende complete.
Quindi, per prima cosa ho pensato che fossero ordinati per tipo, cioè scala, colore, ecc. Ma non è questo il caso, la loro posizione cambia (vedi sotto).
Ordine alfabetico? No.
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")
altre posizioni di scale_colour (per scambiati nome scale_size)
- "E": peggiori
- "F" - "L": all'inizio
- "M" - "N": in basso
e continua ad apparire in alto a nella parte inferiore.
Ordine fattuale? No.
## 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])
Lunghezza del titolo? No. Mi fermo per ora con il codice di esempio, ma anche questo ha prodotto ordini fluttuanti indipendenti dalla lunghezza del carattere.
Qualche idea?
È interessante notare che, per la prima serie di esempi, anteporre uno spazio a ciascun nome * * fa apparire le legende in ordine alfabetico. (es .: 'scale_size (name =" B ") + scale_colour_discrete (name =" C ")'). * Quel metodo *, però, fallisce ancora quando ci sono più di due leggende da sistemare ... –
Sarò molto interessato alla risposta a questa domanda, anche se ho il sospetto che richieda a qualcuno come Kohske o Hadley di pesare. Non sono riuscito a trovare alcuna discussione su questo dalla mailing list, ma sembra che qualcosa sarebbe dovuto accadere ad un certo punto. – joran
Purtroppo, ora l'ordine delle finestre delle legende dipende dall'hash di esse, quindi non c'è modo di prevedere l'ordine ... Sicuramente questa è una cattiva idea della mia implementazione. I (o Hadley o WCH) risolveranno questo problema nella versione futura. – kohske