【问题标题】:Getting error while adding legend in leaflet object in R在 R 中的传单对象中添加图例时出错
【发布时间】: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

【问题讨论】:

    标签: r ggplot2 leaflet


    【解决方案1】:

    对不起,这将是一个澄清,但我不能评论(没有足够的声誉)。

    我认为可能发生的事情是 addLegend 将您的值视为一个字符,或者它没有识别它,因为它可能将其视为一个 shapefile 数据库,所以可能类似于 merge.per_capita_emission_2017_shp@data$Per_capita_emissions_in_tonnes。

    当您将该数据合并到 shapefile 时,您会在一个类似矢量的列表中同时生成形状和数据,因此请务必从您合并它的位置调用该数据部分。

    例如,在我的传单中,如果有 (values = dataM@data[,6]) 数据是我想从 shapefile 列表中调用的子电子表格。

    我不知道数据集的结构(链接是404ing),所以这纯粹是猜测。

    抱歉,我不能更具体

    【讨论】:

      【解决方案2】:

      我认为你应该这样改变:

      addLegend(pal = pal, <br>
                  values = per_capita_emission_2017_shp$Per_capita_emissions_in_tonnes,<br>
                  opacity = 0.7, <br>
                  title = "Per_capita_emissions_in_tonnes",<br>
                  position = "bottomright"<br>
        )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-28
        • 1970-01-01
        • 2018-06-09
        • 2016-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        相关资源
        最近更新 更多