2016-12-28 8 views
0

Ich muss eine Maßstabsleiste zu einer globalen Karte in Ggplot2 in R, und die easiest way schien über das Ggsn-Paket.ggsn Weltkarte Maßstab sieht falsch aus

Aber die Maßstableiste sieht nicht richtig aus, wenn ich die Karte augle - z. B. ist es ~ 4000km über Australien E-W, und ein bisschen weniger als das über Afrika am Äquator. Die 2000-Kilometer-Skala sieht am Äquator breiter aus als Afrika und ist fast so breit wie Australien.

Vielen Dank für Ihre Gedanken!

Reproduzierbare Code:

library(ggplot2) 
library(ggsn) 
library(dplyr) 

GG.GlobalMap = map_data("world") %>% 
    filter(region != "Antarctica") 

ggplot(GG.GlobalMap, aes(long, lat, group = group)) + 
    geom_path(color = "black") + 
    scalebar(data = GG.GlobalMap, dist = 1000, dd2km = TRUE, model = "WGS84", 
      st.size = 3, location = "bottomright") + 
    theme_void() 
+0

Ein Maßstab Balken ist ziemlich bedeutungslos auf einer globalen Karte in lat-long-Projektion gezeichnet, weil Entfernungen stark mit dem Breitengrad verzerrt sind. besser wäre es, ein Raster zu zeichnen, was die bevorzugte Methode für solche Karten ist. Wenn Sie wirklich eine Maßstabsleiste wünschen, verwenden Sie eine Projektion, die Distanzen eng beibehält. siehe z.B. https://en.wikipedia.org/wiki/List_of_map_projections – dww

+0

auch relevant: https://blogs.esri.com/esri/arcgis/2010/04/21/back-to-the-issue-of-scale-bars/ – dww

+0

Ja, darum habe ich auch das Beispiel Afrika entlang des Äquators mit einbezogen - auch hier scheint die Entfernung nicht zu stimmen. –

Antwort

1

Im einfachen lat langen Projektion Sie verwenden, sind Entfernungen mit der geographischen Breite verzerrt, immer progressiv gestreckt, wie sie an den Polen näher. An den Polen ist ein einzelner Punkt auf die volle Breite der rechteckigen Karte ausgestreckt. Daher wird nicht empfohlen, Maßstabsleisten auf solchen Karten zu verwenden, da deren Größe nur auf einem bestimmten Breitengrad korrekt ist und überall auf der Karte irreführend ist. Wir können dies in Aktion sehen, indem eine Reihe von Skalenstrichen in verschiedenen Breiten aufgetragen, zu zeigen, wie sie in der Größe variieren:

ggplot() + 
    geom_path(data = map_data("world"), aes(long, lat, group = group), color = "grey80") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -80, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -60, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -40, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = -20, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 0, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 20, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 40, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 60, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    scalebar(dist = 1000, dd2km = TRUE, model = "WGS84", y.min = 80, y.max = 90, x.min = -180, x.max = 180, st.size = 2, location = "bottomright") + 
    theme_void() 

enter image description here

Aus diesem Grunde ist es in der Regel empfohlen, eine graticule zu verwenden, eher als Maßstabsbalken auf kleinen globalen Karten.

ggplot() + 
    geom_path(data = map_data("world"), aes(long, lat, group = group), color = "black") + 
    scale_x_continuous(breaks = (-9:9)*20) + 
    scale_y_continuous(breaks = (-9:9)*10) + 
    theme_bw() + 
    theme(panel.grid.major = element_line(colour = 'grey50', size = 0.3, linetype = 3)) 

enter image description here

Wenn Sie wirklich eine Maßstabsleiste verwenden möchten, sollten Sie zunächst Ihre Daten (mit spTransform) zu einem gleichen flächigen Projektion neu projizieren, für die Abstände nur minimal verzerrt oder überhaupt nicht .

+0

Danke für diese Erklärung - ich nahm fälschlicherweise an, dass die Größe der Maßstabsleiste der Entfernung am Äquator entsprechen würde. –