R Language
Einführung in geographische Karten
Suche…
Einführung
Siehe auch E / A für geografische Daten
Grundlegende Kartenerstellung mit map () aus den Paketkarten
Die Funktion map()
aus den Package- maps
bietet einen einfachen Ausgangspunkt zum Erstellen von Maps mit R.
Eine grundlegende Weltkarte kann wie folgt gezeichnet werden:
require(maps)
map()
Die Farbe der Kontur kann geändert werden, indem der Farbparameter col
entweder auf den Zeichennamen oder den Hexadezimalwert einer Farbe gesetzt wird:
require(maps)
map(col = "cornflowerblue")
Landmassen mit der Farbe zu füllen col
wir einstellen können fill = TRUE
:
require(maps)
map(fill = TRUE, col = c("cornflowerblue"))
Ein Vektor mit beliebiger Länge kann an col
wenn auch fill = TRUE
gesetzt ist:
require(maps)
map(fill = TRUE, col = c("cornflowerblue", "limegreen", "hotpink"))
Im obigen Beispiel werden Farben aus col
beliebig Polygonen in der Karte zugewiesen, die Regionen darstellen, und Farben werden wiederverwendet, wenn weniger Farben als Polygone vorhanden sind.
Wir können die Farbkodierung auch verwenden, um eine statistische Variable darzustellen, die optional in einer Legende beschrieben werden kann. Eine als solche erstellte Karte wird als "Choroplet" bezeichnet.
Das folgende Choropleth-Beispiel legt das erste Argument von map()
, bei dem es sich bei der database
um "county"
und "state"
, um die Arbeitslosigkeit mithilfe von Daten aus den integrierten Datensätzen unemp
und county.fips
während die unemp
county.fips
überlagert werden:
require(maps)
if(require(mapproj)) { # mapproj is used for projection="polyconic"
# color US county map by 2009 unemployment rate
# match counties to map using FIPS county codes
# Based on J's solution to the "Choropleth Challenge"
# Code improvements by Hack-R (hack-r.github.io)
# load data
# unemp includes data for some counties not on the "lower 48 states" county
# map, such as those in Alaska, Hawaii, Puerto Rico, and some tiny Virginia
# cities
data(unemp)
data(county.fips)
# define color buckets
colors = c("paleturquoise", "skyblue", "cornflowerblue", "blueviolet", "hotpink", "darkgrey")
unemp$colorBuckets <- as.numeric(cut(unemp$unemp, c(0, 2, 4, 6, 8, 10, 100)))
leg.txt <- c("<2%", "2-4%", "4-6%", "6-8%", "8-10%", ">10%")
# align data with map definitions by (partial) matching state,county
# names, which include multiple polygons for some counties
cnty.fips <- county.fips$fips[match(map("county", plot=FALSE)$names,
county.fips$polyname)]
colorsmatched <- unemp$colorBuckets[match(cnty.fips, unemp$fips)]
# draw map
par(mar=c(1, 1, 2, 1) + 0.1)
map("county", col = colors[colorsmatched], fill = TRUE, resolution = 0,
lty = 0, projection = "polyconic")
map("state", col = "white", fill = FALSE, add = TRUE, lty = 1, lwd = 0.1,
projection="polyconic")
title("unemployment by county, 2009")
legend("topright", leg.txt, horiz = TRUE, fill = colors, cex=0.6)
}
50 Landeskarten und erweiterte Choroplethen mit Google Viz
Eine häufig gestellte Frage ist, wie man räumlich getrennte geografische Regionen auf derselben Karte nebeneinander stellt (kombiniert), wie im Fall eines Choropleths, der alle 50 amerikanischen Staaten beschreibt (das Festland mit Alaska und Hawaii nebeneinander).
Das Erstellen einer attraktiven Karte mit 50 Zuständen ist beim Einsatz von Google Maps einfach. Zu den Schnittstellen der Google-API gehören die Pakete googleVis
, ggmap
und RgoogleMaps
.
require(googleVis)
G4 <- gvisGeoChart(CityPopularity, locationvar='City', colorvar='Popularity',
options=list(region='US', height=350,
displayMode='markers',
colorAxis="{values:[200,400,600,800],
colors:[\'red', \'pink\', \'orange',\'green']}")
)
plot(G4)
Die Funktion gvisGeoChart()
erfordert weit weniger Codierung, um einen Choroplet zu erstellen, im Vergleich zu älteren Mapping-Methoden wie map()
aus den Package- maps
. Der colorvar
Parameter ermöglicht das einfache Einfärben einer statistischen Variablen auf einer durch den locationvar
Parameter festgelegten Ebene. Die verschiedenen Optionen übergeben options
als Liste ermöglichen die Anpassung von Details der Karte wie Größe ( height
), Form ( markers
) und Farbcodierung ( colorAxis
und colors
).
Interaktive Kartenpläne
Das Paket enthält mehrere Arten von interaktiven plotly
, einschließlich Karten. Es gibt mehrere Möglichkeiten, eine Karte in plotly
zu erstellen. plot_ly()
Sie die Kartendaten entweder selbst an (über plot_ly()
oder ggplotly()
), verwenden Sie die "native" Zuordnungsfunktion von plot_geo()
über plot_geo()
oder plot_mapbox()
) oder auch eine Kombination aus beiden. Ein Beispiel für die eigene Bereitstellung der Karte wäre:
library(plotly)
map_data("county") %>%
group_by(group) %>%
plot_ly(x = ~long, y = ~lat) %>%
add_polygons() %>%
layout(
xaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE),
yaxis = list(title = "", showgrid = FALSE, showticklabels = FALSE)
)
Für eine Kombination beider Ansätze tauschen Sie plot_ly()
für plot_geo()
oder plot_mapbox()
im obigen Beispiel aus. Weitere Beispiele finden Sie im ausführlichen Buch .
Das nächste Beispiel ist ein "streng nativer" Ansatz, bei dem das Attribut layout.geo verwendet wird, um die Ästhetik und die Zoomstufe der Karte festzulegen . Es verwendet auch die Datenbank world.cities
aus maps
, um die brasilianischen Städte zu filtern und sie über der "nativen" Karte zu zeichnen.
Die poph
: poph
ist ein Text mit der Stadt und ihrer Bevölkerung (was beim Mauszeiger angezeigt wird); q
ist ein geordneter Faktor aus dem Quantil der Bevölkerung. ge
hat Informationen für das Layout der Karten. Weitere Informationen finden Sie in der Paketdokumentation .
library(maps)
dfb <- world.cities[world.cities$country.etc=="Brazil",]
library(plotly)
dfb$poph <- paste(dfb$name, "Pop", round(dfb$pop/1e6,2), " millions")
dfb$q <- with(dfb, cut(pop, quantile(pop), include.lowest = T))
levels(dfb$q) <- paste(c("1st", "2nd", "3rd", "4th"), "Quantile")
dfb$q <- as.ordered(dfb$q)
ge <- list(
scope = 'south america',
showland = TRUE,
landcolor = toRGB("gray85"),
subunitwidth = 1,
countrywidth = 1,
subunitcolor = toRGB("white"),
countrycolor = toRGB("white")
)
plot_geo(dfb, lon = ~long, lat = ~lat, text = ~poph,
marker = ~list(size = sqrt(pop/10000) + 1, line = list(width = 0)),
color = ~q, locationmode = 'country names') %>%
layout(geo = ge, title = 'Populations<br>(Click legend to toggle)')
Dynamische HTML-Karten mit Broschüre erstellen
Leaflet ist eine Open-Source-JavaScript-Bibliothek zum Erstellen dynamischer Karten für das Web. RStudio schrieb R Bindungen für Leaflet, erhältlich durch sein leaflet
- htmlwidgets
Paket , mit eingebauter htmlwidgets
. Prospektkarten lassen sich gut in die Ökosysteme RMarkdown und Shiny integrieren .
Die Schnittstelle wird verrohrt , mit einer leaflet()
Funktion , um eine Karte und Folgefunktionen hinzuzufügen (oder zu entfernen) Kartenebenen zu initialisieren. Es gibt viele Arten von Ebenen, von Markern mit Popups bis hin zu Polygonen zum Erstellen von Choroplethenkarten. Auf Variablen, die in dem data.frame an leaflet()
werden, wird über Funktionsstil ~
quotation zugegriffen.
So state.name
state.center
Datasets state.name
und state.center
:
library(leaflet)
data.frame(state.name, state.center) %>%
leaflet() %>%
addProviderTiles('Stamen.Watercolor') %>%
addMarkers(lng = ~x, lat = ~y,
popup = ~state.name,
clusterOptions = markerClusterOptions())
(Screenshot; klicken Sie für eine dynamische Version.) Dynamische Prospektkarten in glänzenden Anwendungen
Das Merkblatt - Paket ist so ausgelegt , um mit glänzenden integerate
Im ui rufen Sie leafletOutput()
und in dem Server , den Sie anrufen renderLeaflet()
library(shiny)
library(leaflet)
ui <- fluidPage(
leafletOutput("my_leaf")
)
server <- function(input, output, session){
output$my_leaf <- renderLeaflet({
leaflet() %>%
addProviderTiles('Hydda.Full') %>%
setView(lat = -37.8, lng = 144.8, zoom = 10)
})
}
shinyApp(ui, server)
Reaktive Eingaben, die sich auf den Ausdruck renderLeaflet
auswirken, renderLeaflet
jedoch, dass die gesamte Map jedes Mal neu gezeichnet wird, wenn das reaktive Element aktualisiert wird.
Um eine Karte zu ändern, die bereits läuft, sollten Sie die Funktion leafletProxy()
verwenden.
Normalerweise verwenden Sie leaflet
, um die statischen Aspekte der Karte zu erstellen, und leafletProxy
, um die dynamischen Elemente zu verwalten, zum Beispiel:
library(shiny)
library(leaflet)
ui <- fluidPage(
sliderInput(inputId = "slider",
label = "values",
min = 0,
max = 100,
value = 0,
step = 1),
leafletOutput("my_leaf")
)
server <- function(input, output, session){
set.seed(123456)
df <- data.frame(latitude = sample(seq(-38.5, -37.5, by = 0.01), 100),
longitude = sample(seq(144.0, 145.0, by = 0.01), 100),
value = seq(1,100))
## create static element
output$my_leaf <- renderLeaflet({
leaflet() %>%
addProviderTiles('Hydda.Full') %>%
setView(lat = -37.8, lng = 144.8, zoom = 8)
})
## filter data
df_filtered <- reactive({
df[df$value >= input$slider, ]
})
## respond to the filtered data
observe({
leafletProxy(mapId = "my_leaf", data = df_filtered()) %>%
clearMarkers() %>% ## clear previous markers
addMarkers()
})
}
shinyApp(ui, server)