【发布时间】:2020-09-18 16:55:28
【问题描述】:
我正在尝试使用 R 中的传单库在 ggplot 中创建地图,我对 R 编程非常陌生。我的数据集是世界上不同国家的人均碳排放量。为此,我首先将 shp 文件与我的数据集合并,然后创建标签、箱和调色板,然后添加多边形。但是当我尝试使用 addlegend() 添加图例时,它会抛出以下错误: as.character(x) 中的错误: 不能将“闭包”类型强制为“字符”类型的向量。 我已经分阶段检查了代码,并且代码在我添加图例之前一直有效,因此怀疑 pal 中的某些问题或 addlegend() 中的值。
library(leaflet)
library(ggplot2)
library(dplyr)
library(rgeos)
library(maptools)
library(ggmap)
library(broom)
library(readr)
library(lubridate)
library(dplyr)
library(tidyr)
library(scales)
library(RColorBrewer)
theme_set(theme_minimal())
# Read data into per_capita_emission object
per_capita_emission <- read.csv('co-emissions-per-capita.csv')
# Filter dataframe for year 2017
per_capita_emission_2017 <- per_capita_emission %>% filter(Year == "2017")
# read shape file into R
Countries_shp<-readShapeSpatial("World_Countries/World_Countries.shp",delete_null_obj=TRUE)
# leaflet
p1 <- leaflet(Countries_shp) %>%
setView(lng = 145.5, lat = -36.5, zoom = 2)
p1 %>% addPolygons()
per_capita_emission_2017$COUNTRY <- per_capita_emission_2017$Entity
per_capita_emission_2017<-select (per_capita_emission_2017,-c(Entity))
merge.per_capita_emission_2017_shp<-sp::merge(Countries_shp, per_capita_emission_2017,
by="COUNTRY", duplicateGeoms = TRUE)
bins <- quantile(
merge.per_capita_emission_2017_shp$Per_capita_emissions_in_tonnes,
probs = seq(0,1,.2), names = FALSE, na.rm = TRUE)
pal <- colorBin(
"YlOrRd",
domain = merge.per_capita_emission_2017_shp$Per_capita_emissions_in_tonnes,
bins = 4,
pretty = FALSE
)
p1 <- leaflet(merge.per_capita_emission_2017_shp) %>%
setView(lng = 147, lat = -36.5, zoom = 2)
p1 %>% addPolygons(
fillColor = ~pal(Per_capita_emissions_in_tonnes),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 3,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE))
labels <- sprintf(
"<strong>%s</strong><br/>%g Per_capita_emissions_in_tonnes",
merge.per_capita_emission_2017_shp$COUNTRY,
merge.per_capita_emission_2017_shp$Per_capita_emissions_in_tonnes
) %>% lapply(htmltools::HTML)
p1 %>% addPolygons(
data = merge.per_capita_emission_2017_shp,
fillColor = ~pal(merge.per_capita_emission_2017_shp$Per_capita_emissions_in_tonnes),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
color = "#666",
dashArray = "3",
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto"))%>%
addLegend(pal = pal,
values = merge.per_capita_emission_2017_shp$Per_capita_emissions_in_tonnes,
opacity = 0.7,
title = "Per_capita_emissions_in_tonnes",
position = "bottomright"
) %>%
addControl(title, position = "topright")
以下是获取数据集的链接,请包含 blob: 以下载数据: blob:https://ourworldindata.org/27f19210-ac40-4909-9826-c7a72dc64a23
以下是获取国家坐标的 shp 文件的链接: https://tapiquen-sig.jimdofree.com/app/download/5496966159/World_Countries.rar?t=1589254856
【问题讨论】: