Entschuldigung, dass keine Beispieldaten für mein Problem enthalten sind. Ich konnte keine einfache Möglichkeit finden, eine Beispielformdatei zu erstellen. Hoffentlich können erfahrene Benutzer von ggplot
sehen, was ich aus der folgenden Beschreibung machen möchte.Verschiedene Legenden und Füllfarben für facettierten ggplot?
Ich habe:
A
data.frame
X mit Informationen über Probeflächen (plotid
,var1
,var2
,var3
,var4
, ...)Eine Polygon Shape-Datei
Y
mit räumlichen Informationen für die Probeplots
Import des Shapefiles Y
(mit maptools
) und fortify
ing als data.frame
Z
(ggplot2
) funktioniert gut. melt
ing X
bis X_melted
funktioniert genauso gut. merge
-ing Z
und X_melted
zu mapdf
funktioniert auch.
Das bedeutet, dass wir jetzt eine data.frame
in Langform mit räumlichen Informationen haben und var1
, var2
, var3
, ...
nun wie folgt Ich möchte diesen Datenrahmen zeichnen:
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
Das Ergebnis ist ein nettes Diagramm mit einem Panel für jede Variable. Die Karten der Panels sind identisch, aber die Füllfarbe variiert mit den Werten der Variablen. Bis jetzt funktioniert alles wie ein Zauber ... mit einem Problem:
Die Variablen haben unterschiedliche Min- und Max-Werte. Zum Beispiel var1
geht 0
-5
, var2
von 0
zu 400
, var3
5
-10
usw. In diesem Beispiel ist die Legende für die Füllfarbe von 0
zu 400
geht. var2
ist schön gezeichnet, aber var1
und var3
sind grundsätzlich in der gleichen Farbe.
Gibt es eine Möglichkeit, eine andere Legende für jedes Facettenfeld zu verwenden? Oder ist das einfach (noch) nicht möglich mit facet_wrap
oder facet_grid
in ggplot
?
Ich könnte einzelne Diagramme für jede Variable erstellen und sie mit Ansichtsfenstern verbinden, aber es gibt eine Vielzahl von Variablen und das wäre eine Menge Arbeit.
Oder gibt es vielleicht ein anderes Paket oder eine Methode, die ich verwenden könnte, um das zu erreichen, was ich tun möchte?
Und Hilfe würde sehr geschätzt werden.:)
Edit: Mit Hilfe der ggplot2
-package Beschreibung konstruierte ich ein Beispiel, das mein Problem veranschaulicht:
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
Das Panel auf der rechten Seite zeigt verschiedene Werte für var2
auf der Karte. Auf der linken Seite haben alle Polygone die gleiche Farbe. Dies ist logisch, da für alle Panels nur ein Farbverlauf verwendet wird. Könnte ich für jedes Panel einen anderen Farbverlauf verwenden?
Ok, danke für die Antwort. Wird dieses Feature vielleicht bald implementiert? ;) – donodarazao
Es ist extrem unwahrscheinlich, weil es einfach ist, mit separaten Plots zu arbeiten. – hadley