2014-10-08 9 views
5

Hilfe! Ich habe einen Datensatz von GPS-x/y-Positionen für Bäume in einem Wald, und mit diesen Codes in eine hübsche Karte in ggplot:Kann eine Skalierungsleiste oder einen Nordpfeil nicht auf ggplot2 plotten

#ggmap! 
library(ggmap) 
library(mapproj) 
map <- get_map(location = 'Madagascar', zoom = 10) 
geocode("kianjavato") 
#lon  lat 
#47.86682 -21.38024 
k <- "kianjavato" 
myMap <- get_map(location=k, source="stamen", maptype="toner", crop=FALSE, zoom=16) 
ggmap(myMap) 
m <- ggmap(myMap) + geom_point(aes(y = Lat, x = Lon, colour = Foraged, shape=Plot), data = GPS) 
n <- m + scale_colour_manual(values=c("blue", "red3")) + 
    scale_shape_discrete(solid=F, legend=F) + 
    scale_y_continuous(limits=c(-21.376,-21.3715)) + 
    scale_x_continuous(limits=c(47.865,47.869)) 
plot(n) 

Doch egal, welche Art von Code Ich versuche, kann ich nicht bekommen Ein nach Norden weisender Pfeil oder eine Maßstabsleiste zum Zeichnen auf meiner Karte! Ich habe viele Lösungen ausprobiert, von denen einige dies wie folgt aussehen:

versuchen Maßstab

map.scale <- ggmap(new) + (ggmap, extent = "normal", maprange = FALSE) %+% sites.data + 
    geom_point(aes(x = lon, y = lat, colour = colour)) + 
    geom_text(aes(x = lon, y = lat, label = label), hjust = 0, vjust = 0.5, size = 8/ptspermm) + 
    geom_segment(data = sbar, aes(x = lon.start, xend = lon.end, 
            y = lat.start, yend = lat.end)) + 
    geom_text(data = sbar, aes(x = (lon.start + lon.end)/2, 
           y = lat.start + 0.025*(bb$ur.lat - bb$ll.lat), 
       label = paste(format(distance, digits = 4, nsmall = 2),'km')), 
       hjust = 0.5, vjust = 0, size = 8/ptspermm) + 
    coord_map(projection="mercator", xlim=c(bb$ll.lon, bb$ur.lon), 
       ylim=c(bb$ll.lat, bb$ur.lat)) 

#library(SDMTools) 
#Scalebar(x=47.868,y=-21.375,distance=100,unit='m') #show values in meters 
#Error in map.scale(x = 50, y = -22) : argument "len" is missing, with no default 

map.scale(x=47.868, y=-21.375, ratio=FALSE, relwidth=0.2) 
#Error in map.scale(x = 47.868, y = -21.375, ratio = FALSE, relwidth = 0.2) : 
    unused argument(s) (ratio = FALSE, relwidth = 0.2) 
map.scale(x=47.868, y=-21.375) 
#Error in map.scale(x = 47.868, y = -21.375) : 
    argument "len" is missing, with no default 

ich sowohl den Nordpfeil hinzufügen müssen und die Skala aber weder Willen Grundstück! Warum?

+0

Vielen Dank! Aber was, wenn ich Kilometer brauche! – user3720904

Antwort

1

Versuchen:

library(GISTools) 
map.scale(53,15,len=12,"Miles",4,0.5,sfcol='red') 
north.arrow(xb=15.75, yb=43.25, len=0.05, lab="N",col="cyan") 

Blick auf GISTools für weitere Details.

+0

Vielen Dank, ich werde das nach der Arbeit versuchen. Aber was, wenn ich Meter brauche, nicht Meilen? – user3720904

+0

schauen Sie sich einfach den Link an, den ich für GISTools bereitgestellt habe. – Ujjwal

+0

@ user3720904 lassen Sie mich wissen, ob das funktioniert oder nicht. – Ujjwal

3

Das Paket ggsn ist hier nützlich. Ohne die GPS-Daten kann ich nicht alle Ihre Skripte ausführen, aber dies sollte das Nordsymbol und die Maßstabsleiste in angemessenen Positionen hinzufügen, wenn die angegebenen x- und y-Grenzen angegeben werden.

#First, add a scale bar. 
n <- n + scalebar(location="bottomright",y.min=-21.3755, y.max=-21.3715, 
      x.min=47.865, x.max=47.869, dist=.1, dd2km= TRUE, model='WGS84', 
      st.dist=.04) 

#Now add a north arrow and plot the map. 
north2(n, x=.3, y=.8, symbol=9) 

north symbol and scale bar example

+0

Gibt es eine Änderung im Paket? Ich habe eine schwarze Box um den Pfeil. Weißt du, warum? –

+0

@ M.Beausoleil Ich habe das Skript einfach neu übersetzt und hatte kein Problem damit, daher ist es möglich, dass wir verschiedene Versionen ausführen, die sich anders verhalten. Ich habe ggsn 0.3.0 verwendet, um das obige Beispiel zu erstellen. Entschuldigung, ich kann nicht mehr Hilfe sein! –