Построение карты мирового хлоропета с помощью листовки

#r #r-leaflet

Вопрос:

Я пытаюсь нарисовать карту мира хлоропетом, но на этикетках не отображаются правильные данные. Я не уверен, в чем может быть проблема. См.Ниже воспроизводимый код. Как только я наведу курсор на США, появится другая метка.

введите описание изображения здесь

 ## Source of shape file
# http://thematicmapping.org/downloads/world_borders.php

## Set working directory ## 
## Download the shape files to working directory ##
download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip" , destfile="TM_WORLD_BORDERS_SIMPL-0.3.zip")
## Unzip them ##
unzip("TM_WORLD_BORDERS_SIMPL-0.3.zip")

## OR ## You can directly connect to download link and download to a temp folder as well ##

## Load Required Packages## 
library(leaflet)
library(rgdal) # R 'Geospatial' Data Abstraction Library. Install package if not already installed.


## Load the shape file to a Spatial Polygon Data Frame (SPDF) using the readOGR() function
myspdf = readOGR(dsn=getwd(), layer="TM_WORLD_BORDERS_SIMPL-0.3")
head(myspdf)
summary(myspdf)

# using the slot data
head(myspdf@data)
head(myspdf$NAME, n=220)


#Get my variable
newdff<-c("Ghana", "Grenada", "Guyana", "India", "Jamaica", "Kenya", "United States","Canada")
val<-c(1,2,4,5,5,1000,20000, 100)

df<-data.frame(newdff,val)
df

summary(df)

labels <- sprintf(
  "<strong>Country:%s</strong><br/>Population:%g",
  df$newdff, df$val)%>% lapply(htmltools::HTML) 

pal <- colorNumeric("OrRd", df$val)
#
total<-subset(myspdf, myspdf$NAME %in% df$newdff)
head(total@data)
## Create map object and add tiles and polygon layers to it
leaflet(data=total) %>% 
  addTiles() %>% 
  addPolygons(fillColor = "green",
              highlight = highlightOptions(weight = 1,
                                           color = "red",
                                           fillOpacity = 0.1,
                                           bringToFront = TRUE),
              label=labels)
 

Ответ №1:

Хотя я не до конца понимаю ручное создание вектора «val» ,

Ссылка на «общий» фрейм данных при создании «ярлыков», похоже, работает.

 ## Source of shape file
# http://thematicmapping.org/downloads/world_borders.php

## Set working directory ## 
## Download the shape files to working directory ##
download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip" , destfile="TM_WORLD_BORDERS_SIMPL-0.3.zip")
## Unzip them ##
unzip("TM_WORLD_BORDERS_SIMPL-0.3.zip")

## OR ## You can directly connect to download link and download to a temp folder as well ##

## Load Required Packages## 
library(leaflet)
library(rgdal) # R 'Geospatial' Data Abstraction Library. Install package if not already installed.


## Load the shape file to a Spatial Polygon Data Frame (SPDF) using the readOGR() function
myspdf = readOGR(dsn=getwd(), layer="TM_WORLD_BORDERS_SIMPL-0.3")
head(myspdf)
summary(myspdf)

# using the slot data
head(myspdf@data)
head(myspdf$NAME, n=220)


#Get my variable
newdff<-c("Ghana", "Grenada", "Guyana", "India", "Jamaica", "Kenya", "United States","Canada")
val<-c(1,2,4,5,5,1000,20000, 100)

df<-data.frame(newdff,val)
df

summary(df)

labels <- sprintf(
  "<strong>Country:%s</strong><br/>Population:%g",
  df$newdff, df$val)%>% lapply(htmltools::HTML) 

pal <- colorNumeric("OrRd", df$val)
#
total<-subset(myspdf, myspdf@data$NAME %in% df$newdff)

labels <- sprintf(
  "<strong>Country:%s</strong><br/>Population:%g",
  total$NAME, df$val)%>% lapply(htmltools::HTML) 

head(total@data)
## Create map object and add tiles and polygon layers to it
leaflet(data=total) %>% 
  addTiles() %>% 
  addPolygons(fillColor = "green",
              highlight = highlightOptions(weight = 1,
                                           color = "red",
                                           fillOpacity = 0.1,
                                           bringToFront = TRUE),
              label=labels)
 

Карта

Комментарии:

1. Большое тебе спасибо, Сьюзен! Это сработало! Похоже, что значения вектора val также неправильно отображаются в метке. Я не уверен, что может быть не так.

2. Вместо того, чтобы иметь значения в отдельном векторе. Мне нравится добавлять значения во фрейм данных с именем, включенным в фрейм данных, и использовать функцию слияния() из пакета sp, чтобы присоединить df к пространственному объекту