I am trying to create a map in ggplot using leaflet library in R, I am pretty new to R programing. My dataset is per capita carbon emission of different countries in the world. For this, I first merge the shp file with my dataset, then created lables, bins and palette and then added polygons. But when I am trying to add legend using addlegend(), its throwing the following error: Error in as.character(x) : cannot coerce type 'closure' to vector of type 'character'. I have checked code in stages and codes works until I add legend, so suspecting either some issue in pal or value in 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")
Following is the link to get the dataset, please include blob: to download data: blob:https://ourworldindata.org/27f19210-ac40-4909-9826-c7a72dc64a23
Following is the link to get the shp file for country's cordinates: https://tapiquen-sig.jimdofree.com/app/download/5496966159/World_Countries.rar?t=1589254856