2013-06-21 13 views
9

Widziałem interaktywną mapę choropletów na poziomie hrabstwa USA na stronie www.betydb.org. Chciałbym odtworzyć podobną mapę za pomocą R. Po prostu chcę mapę i etykiety narzędzi (nie wszystkie płytki z różnymi poziomami powiększenia lub możliwość przełączania map)Wyswietlaj dane na poziomie hrabstwa z podpowiedziami w R

Mapa jest obecnie tworzona w ruby, a popup (w lewym dolnym rogu) wysyła zapytanie do bazy danych MySQL. Programista, który to napisał, przeniósł się i nie znam Rubiego.

map

Tu zacznę z pliku csv. Dane obejmują nazwy stanów i powiatów oraz państwowe i powiatowe FIPS. Chciałbym wykreślić Avg_yield.

mydata <- read.csv("https://www.betydb.org/miscanthus_county_avg_yield.csv") 
> colnames(mydata) 
[1] "OBJECTID" "Join_Count" "TARGET_FID" "COUNTY_NAME" "STATE_NAME" "STATE_FIPS" 
[7] "CNTY_FIPS" "FIPS"  "Avg_lat"  "Avg_lon"  "Avg_yield" 

można wykreślić na poziomie stanu użyciu pakietu

library(googleVis) 
p <- gvisGeoChart(data = mydata, locationvar="STATE_NAME", colorvar = 'Avg_yield', 
        options= list(region="US", displayMode="regions", 
        resolution="provinces")) 
plot(p) 

enter image description here

googleVis ten zapewnia uzyskanie stanu, poziomu zabarwienia. Moje pytanie brzmi: jak mogę uzyskać coś takiego z kolorami i podpowiedziami na poziomie powiatu (zamiast na poziomie stanu)?

Pomoc gvisGeoChart (w regionie i rozdzielczości) i Google chart documentation wskazują, że może to nie być możliwe, ale dokumentacja jest tak obszerny, że nie jest jasne, co moje inne opcje są w zasięgu R.

So, czy istnieje sposób na uzyskanie mapy z podpowiedziami i kolorystyką na poziomie powiatu?

+0

pracuję na podobnym mapie USA. Wykres Google ma opcję, która może być używana w R: 'resolution =" metros "' – Kevin

Odpowiedz

3

To pytanie pochodzi z 2013 roku. Nie jestem pewien, czy pakiet leaflet był wtedy niedostępny. Zbliża się koniec 2017 roku i możliwe jest osiągnięcie tego zadania. Chcę dla ciebie zostawić następujące rzeczy, jeśli nadal musisz wykonywać podobne zadania. W takim przypadku w zestawie danych są pewne brakujące hrabstwa. Kraje te występują w danych wieloboków USA, ale ich brakuje w mydata. Więc dodałem te powiaty do mydata używając setdiff() i bind_rows(). Podczas rysowania mapy ulotek należy określić paletę kolorów. Avg_yield to zmienna ciągła. Więc używasz colorNumeric(). Zostawiam zrzut ekranu pokazujący część mapy ulotek.

library(raster) 
library(leaflet) 
library(tidyverse) 

# Get USA polygon data 
USA <- getData("GADM", country = "usa", level = 2) 

### Get data 
mydata <- read.csv("https://www.betydb.org/miscanthus_county_avg_yield.csv", 
        stringsAsFactors = FALSE) %>% 
      dplyr::select(COUNTY_NAME, Avg_yield) 

### Check counties that exist in USA, but not in mydata 
### Create a dummy data frame and bind it with mydata 

mydata <- data.frame(COUNTY_NAME = setdiff(USA$NAME_2, mydata$COUNTY_NAME), 
        Avg_yield = NA, 
        stringsAsFactors = FALSE) %>% 
      bind_rows(mydata) 

### Create a color palette 
mypal <- colorNumeric(palette = "viridis", domain = mydata$Avg_yield) 

leaflet() %>% 
addProviderTiles("OpenStreetMap.Mapnik") %>% 
setView(lat = 39.8283, lng = -98.5795, zoom = 4) %>% 
addPolygons(data = USA, stroke = FALSE, smoothFactor = 0.2, fillOpacity = 0.3, 
      fillColor = ~mypal(mydata$Avg_yield), 
      popup = paste("Region: ", USA$NAME_2, "<br>", 
          "Avg_yield: ", mydata$Avg_yield, "<br>")) %>% 
addLegend(position = "bottomleft", pal = mypal, values = mydata$Avg_yield, 
      title = "Avg_yield", 
      opacity = 1) 

enter image description here

enter image description here

+0

Ta mapa pokazuje całą Amerykę Północną. Jak to zmienić, pokaż tylko USA, w tym Alaskę i Hawaje? – Harish

Powiązane problemy