Wie zur Verbesserung der räumlichen raster map mit ggplot, wenn im Vergleich zu spplot?
Wie kann ich die Legende von räumlichen raster map plot mit ggplot im Vergleich zu einer spplot() Legende?
Ich möchte plot Geo-maps mit ggplot() anstelle von ssplot() allerdings gibt es ein paar Dinge, die ich möchte, zu verbessern, wenn im Vergleich zu den spplot:
- erstellen eines ggplot-Legende, die von kleinen (unten) zu hohen Werten (oben)
- Haben die Brüche in der ggplot-Legende ähnlich der ssplot() Legende so, dass ich weiß, was die Grenzen sind von jeder Farbe.
## load packages
require(raster)
require(ggplot2)
require(rgdal)
require(RColorBrewer)
set.seed(1)
r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40,
crs="+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100
+ellps=WGS84")
r <- setValues(r,matrix(rnorm(1600, mean=0.4,sd=0.2)))
## 1. spatial map with spplot
cuts <-seq(minValue(r),maxValue(r),length.out=8)
cuts = round(cuts,digits=2)
col.regions = brewer.pal(length(cuts)+3-1, "RdYlGn")
print(
spplot(as(r, 'SpatialGridDataFrame'),at=cuts,
col.regions=col.regions,
colorkey=list(labels=list(at=cuts),at=cuts), pretty=TRUE,
scales=list(draw=T)
)
)
## 2. spatial map with ggplot
p = rasterToPoints(r); df = data.frame(p)
colnames(df) = c("x", "y", "NDVI")
p <- ggplot(data=df) + geom_tile(aes(x, y, fill=NDVI)) +
coord_equal() + labs(x=NULL, y=NULL) +
scale_fill_gradient2(low="red", mid="yellow",high="green",
limits=c(minValue(r),maxValue(r)), midpoint = 0.4) + theme_bw() +
scale_x_continuous(expand=c(0,0)) + scale_y_continuous(expand=c(0,0))
print(p)
ssplot ( - ) Ergebnis
ggplot() Ergebnis
- Bitte verwenden Sie nicht rot-grün-Kontraste. Die 5-10% der Männer mit rot-grün-Schwäche finden Sie sehr schwer zu Lesen.
- der link zu Koske ' s Seite - zeigt mehr oder weniger das, was ich gerne tun würde. Ich werde zu erkunden ggplot() Kapazität weitere, Farben anpassen,verbessern, Legende und nach einem update weiter unten. Alle Tipps/Beispiele sind willkommen. Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dank @joran für den Zeiger auf dieses.
hier ist ein Beispiel code und die Ausgabe über die dev-version:
können Sie wahrscheinlich versuchen, dies durch:
AKTUALISIERT:
hier ist die Anleitung für die installation von Grund auf:
install_github("scales")
. wenn Sie Fehler wie fehlende PaketeRColorBrewer, stringr, dichromat, munsell, plyr, colorspace
, dann versucheninstall.packages(c('RColorBrewer', 'stringr', 'dichromat', 'munsell', 'plyr', 'colorspace'), dep=TRUE)
Ich bin mir nicht sicher, wie (1) aus der Spitze von meinem Kopf. Aber hier sind einige mögliche Lösungen für (2) und (3).
Ich glaube nicht, dass
ggplot2
ist derzeit in der Lage Beschriftung der Legende ist in dieser Form. Allerdings Koske wurde auf einige code arbeiten, die kann gerollt werden, inggplot2
in die Zukunft, schafft Legenden, die sind gestaltet, auf diese Weise. Hier ist ein link, obwohl es erfordert die Installation einiger zusätzlicher Pakete und ist nur alpha.Zu den bestimmten Pausen, die Sie suchen, versuchen Sie dies:
produziert diese Grafik auf meinem Rechner:
Habe ich noch nicht getestet, was das Aussehen würde mit dem experimentellen code oben erwähnt.
cut
weisen Sie die Farben per hand, und die Reihenfolge der Ebenen ...Re: (2)
Erste
cut()
Ihre Daten zu bekommen, einen klassifizierten Datensatz. Verwendenbreaks
undlabels
Optionen incut()
zu erhalten, die richtigen Bezeichnungen, z.B.:Dann können Sie plot mit ggplot und der Verlagerung der Etiketten so, dass Sie direkt auf die Farbe boudaries mit:
Siehe auch:
Generieren eine farblegende mit verschoben Etiketten mit ggplot2
Alternativ können Sie die Farbe Legende mit einem externen Skript (z.B. Absolventen ergibt eine schöne Farbe legends mit der rechten scripts), und geben Sie die gleichen Farben manuell in scale_fill_manual.