Ci scusiamo per i dati di esempio non inclusi per il mio problema. Non sono riuscito a trovare un modo per produrre facilmente un file di esempio. Si spera che gli utenti esperti di ggplot
possano vedere cosa mi piacerebbe fare dalla descrizione seguente.Diverse legende e colori di riempimento per il ggplot sfaccettato?
ho:
Un
data.frame
X con le informazioni su aree di saggio (plotid
,var1
,var2
,var3
,var4
, ...)Un poligono shapefile
Y
con informazioni spaziali per i grafici di esempio
L'importazione dello shapefile Y
(con maptools
) e fortify
come data.frame
Z
(ggplot2
) funziona correttamente. melt
ing X
a X_melted
funziona ugualmente bene. merge
-ing Z
e X_melted
a mapdf
funziona pure.
Ciò significa che ora abbiamo un data.frame
in forma lungo con informazioni spaziali e var1
, var2
, var3
, ...
Ora voglio tracciare questa cornice di dati in questo modo:
pl1 <- ggplot(mapdf,aes(long,lat),group=group)
pl1 <- pl1 + geom_polygon(aes(group=group,fill=value),colour="black")
pl1 <- pl1 + facet_grid(variable ~ .)
pl1 <- pl1 + coord_equal(ratio = 1)
pl1
Il risultato è una bella trama con un pannello per ogni variabile. Le mappe dei pannelli sono identiche, ma il colore di riempimento varia con i valori delle variabili. Fino ad ora, tutto funziona come un fascino ... con un problema:
Le variabili hanno valori min e max diversi. Ad esempio var1
va da 0
a 5
, var2
da 0
a 400
, var3
da 5
a 10
, ecc In questo esempio, la legenda per il colore di riempimento va dal 0
a 400
. var2
è ben disegnato, ma var1
e var3
sono fondamentalmente nello stesso colore.
C'è un modo per utilizzare una legenda diversa per ciascun pannello del facet? O semplicemente non è (ancora) possibile con facet_wrap
o facet_grid
in ggplot
?
Potrei creare singoli grafici per ogni variabile e unirli a viewport, ma ci sono un sacco di variabili e questo sarebbe molto lavoro.
Oppure c'è forse un altro pacchetto o metodo che potrei usare per realizzare ciò che mi piacerebbe fare?
E l'aiuto sarebbe molto apprezzato.:)
Edit: Con l'aiuto della descrizione ggplot2
-package, ho costruito un esempio che illustra il mio problema:
ids <- factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3"))
values <- data.frame(
id = ids,
val1 = cumsum(runif(6, max = 0.5)),
val2 = cumsum(runif(6, max = 50))
)
positions <- data.frame(
id = rep(ids, each = 4),
x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3,
0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3),
y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5,
2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2)
)
values <- melt(values)
datapoly <- merge(values, positions, by=c("id"))
p <- ggplot(datapoly, aes(x=x, y=y)) + geom_polygon(aes(fill=value, group=id),colour="black")
p <- p + facet_wrap(~ variable)
p
Il pannello a destra mostra valori diversi per var2
sulla mappa. Tuttavia, sul pannello a sinistra, tutti i poligoni hanno lo stesso colore. Questo è logico, perché per tutti i pannelli viene utilizzata una sola sfumatura di colore. Posso usare una sfumatura di colore diversa per ciascun pannello?
Ok, grazie per la risposta. Questa funzionalità potrebbe essere implementata in qualsiasi momento presto? ;) – donodarazao
È estremamente improbabile, perché è facile lavorare aggirando trame separate. – hadley