Przepraszamy za niewymienione żadne przykładowe dane dotyczące mojego problemu. Nie mogłem znaleźć sposobu na łatwe utworzenie przykładowego pliku kształtu. Mamy nadzieję, że doświadczeni użytkownicy z ggplot
mogą zobaczyć, co chciałbym zrobić z poniższego opisu.Różne legendy i kolory wypełnienia dla fasetowanego ggplota?
mam:
data.frame
X z informacjami o powierzchni próbnych (plotid
,var1
,var2
,var3
,var4
...)Wielokąt shapefile
Y
z informacji przestrzennej dla powierzchnie próbne
Importowanie kształtu pliku Y
(z maptools
) i fortify
jako data.frame
Z
(ggplot2
) działa poprawnie. melt
ing X
do X_melted
działa równie dobrze. merge
-ing Z
i X_melted
do mapdf
działa również.
Oznacza to, że teraz mamy data.frame
w długiej formie z informacji przestrzennej i var1
, var2
, var3
...
Teraz chcę wykreślić tę ramkę danych takiego:
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
Wynik jest ładną fabułą z jednym panelem dla każdej zmiennej. Mapy paneli są identyczne, ale kolor wypełnienia zależy od wartości zmiennych. Do tej pory wszystko działa jak urok ... z jednym problemem:
Zmienne mają różne wartości min i maksimum. Na przykład var1
idzie z 0
do 5
, var2
z 0
do 400
, var3
z 5
do 10
itp w tym przykładzie, legenda dla koloru wypełnienia idzie z 0
do 400
. var2
jest ładnie narysowany, ale var1
i var3
są w zasadzie w tym samym kolorze.
Czy istnieje sposób, w jaki mogę użyć innej legendy dla każdego panelu aspektu? Czy jest to po prostu niemożliwe (jeszcze) z facet_wrap
lub facet_grid
w ggplot
?
Potrafię tworzyć indywidualne wykresy dla każdej zmiennej i łączyć je z rzutniami, ale jest tam mnóstwo zmiennych i będzie to wymagało wiele pracy.
A może jest inny pakiet lub metoda, której mógłbym użyć, aby osiągnąć to, co chcę zrobić?
Pomoc byłaby bardzo ceniona.:)
Edit: Z pomocą ggplot2
-package opisem, budowałem przykład, który ilustruje mój problem:
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
panel po prawej stronie ilustruje różne wartości dla var2
na mapie. Na panelu po lewej jednak wszystkie wielokąty mają ten sam kolor. Jest to logiczne, ponieważ dla wszystkich paneli stosowany jest tylko jeden gradient kolorów. Czy mogę użyć innego gradientu kolorów dla każdego panelu?
OK, dziękuję za odpowiedź. Czy ta funkcja może zostać zaimplementowana w najbliższym czasie? ;) – donodarazao
Jest to bardzo mało prawdopodobne, ponieważ można łatwo obejść rysując oddzielne wątki. – hadley