Buscar..


Introducción

Vea también I / O para datos geográficos

Creación de mapas básicos con map () a partir de los mapas de paquetes.

El map() funciones map() de los maps paquetes proporciona un punto de partida simple para crear mapas con R.

Un mapa del mundo básico se puede dibujar de la siguiente manera:

require(maps)
map()

introduzca la descripción de la imagen aquí

El color del contorno se puede cambiar estableciendo el parámetro de color, col , ya sea al nombre del personaje o al valor hexadecimal de un color:

require(maps)
map(col = "cornflowerblue")

introduzca la descripción de la imagen aquí

Para rellenar las masas de tierra con el color en col podemos establecer fill = TRUE :

require(maps)
map(fill = TRUE, col = c("cornflowerblue"))

introduzca la descripción de la imagen aquí

Se puede suministrar un vector de cualquier longitud a col cuando fill = TRUE también se establece:

require(maps)
map(fill = TRUE, col = c("cornflowerblue", "limegreen", "hotpink"))

introduzca la descripción de la imagen aquí

En el ejemplo anterior, los colores de col se asignan arbitrariamente a polígonos en el mapa que representa las regiones y los colores se reciclan si hay menos colores que polígonos.

También podemos usar la codificación de colores para representar una variable estadística, que opcionalmente se puede describir en una leyenda. Un mapa creado como tal se conoce como "coropleta".

El siguiente ejemplo de choropleth establece el primer argumento de map() , que es la database de database en "county" y "state" para colorear el desempleo de código usando datos de los conjuntos de datos unemp y county.fips mientras se superponen líneas de estado en blanco:

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)
}

introduzca la descripción de la imagen aquí

50 mapas estatales y coropletas avanzadas con Google Viz

Una pregunta común es cómo yuxtaponer (combinar) regiones geográficas físicamente separadas en el mismo mapa, como en el caso de un coropleta que describe los 50 estados estadounidenses (el continente con Alaska y Hawai yuxtapuestos).

Crear un atractivo mapa de 50 estados es simple cuando se aprovecha Google Maps. Las interfaces para la API de Google incluyen los paquetes googleVis , ggmap y 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)

coropleta

La función gvisGeoChart() requiere mucha menos codificación para crear una choropleth en comparación con los métodos de mapeo más antiguos, como map() de los maps paquetes. El parámetro colorvar permite colorear fácilmente una variable estadística, a un nivel especificado por el parámetro locationvar . Las diversas opciones pasadas a options como una lista permiten la personalización de los detalles del mapa, como el tamaño ( height ), la forma ( markers ) y la codificación de colores ( colorAxis y colors ).

Mapas de trama interactivos

El paquete plotly permite muchos tipos de gráficos interactivos, incluyendo mapas. Hay algunas formas de crear un mapa en forma plotly . Proporcione los datos del mapa usted mismo (a través de plot_ly() o ggplotly() ), use las capacidades de mapeo "nativas" de plot_geo() través de plot_geo() o plot_mapbox() ), o incluso una combinación de ambos. Un ejemplo de suministrar el mapa usted mismo sería:

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)
    )

introduzca la descripción de la imagen aquí

Para una combinación de ambos enfoques, intercambie plot_ly() por plot_geo() o plot_mapbox() en el ejemplo anterior. Ver el libro de la trama para más ejemplos.

El siguiente ejemplo es un enfoque "estrictamente nativo" que aprovecha el atributo layout.geo para establecer la estética y el nivel de zoom del mapa. También utiliza la base de datos world.cities de los maps para filtrar las ciudades brasileñas y world.cities sobre el mapa "nativo".

Las principales variables: poph es un texto con la ciudad y su población (que se muestra al pasar el mouse); q es un factor ordenado a partir del cuantil de la población. ge tiene información para el diseño de los mapas. Consulte la documentación del paquete para obtener más información.

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)')

Esta es una instantánea

Realización de mapas HTML dinámicos con folleto

Leaflet es una biblioteca de código abierto de JavaScript para hacer mapas dinámicos para la web. RStudio escribió enlaces R para Leaflet, disponibles a través de su paquete de leaflet , construido con htmlwidgets . Los mapas de folletos se integran bien con los ecosistemas de RMarkdown y Shiny .

La interfaz se canaliza , utilizando una función leaflet() para inicializar un mapa y las funciones subsiguientes agregando (o eliminando) capas de mapas. Hay muchos tipos de capas disponibles, desde marcadores con ventanas emergentes hasta polígonos para crear mapas de coropletas. Se accede a las variables en el data.frame pasado al leaflet() a través de la cita de style-style ~ .

Para asignar los conjuntos de datos state.name y state.center :

library(leaflet)

data.frame(state.name, state.center) %>% 
    leaflet() %>% 
    addProviderTiles('Stamen.Watercolor') %>% 
    addMarkers(lng = ~x, lat = ~y, 
               popup = ~state.name, 
               clusterOptions = markerClusterOptions())
captura de pantalla del mapa del folleto (Captura de pantalla; haga clic para la versión dinámica.)

Mapas dinámicos de folletos en aplicaciones Shiny

El Folleto de paquete está diseñado para integerate con Brillante

En la interfaz de leafletOutput() llama a leafletOutput() y en el servidor al que llama 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)

Sin embargo, las entradas reactivas que afectan a la expresión renderLeaflet harán que todo el mapa se vuelva a dibujar cada vez que se actualice el elemento reactivo.

Por lo tanto, para modificar un mapa que ya se está ejecutando, debe usar la función leafletProxy() .

Normalmente, se usa un leaflet para crear los aspectos estáticos del mapa, y leafletProxy para administrar los elementos dinámicos, por ejemplo:

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)

introduzca la descripción de la imagen aquí



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow