传说在北卡罗来纳州地理地图上消失?

2024-05-26

我正在使用 R 编程语言。

使用北卡罗来纳州的内置地图,我生成了 3 个随机变量(收入、孩子数量、体重),然后为此数据创建了地图(使用“传单”库)(通过循环):

library(sf)  
library(mapview)
library(leaflet)
library(leafgl)
library(colourvalues)
library(leaflet.extras)
library(magick)

nc <- st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE) %>% 
  st_transform(st_crs(4326)) %>% 
  st_cast('POLYGON')


set.seed(123) 
nc$median_income <- sample(20000:100000, nrow(nc), replace = TRUE)
pal <- colorNumeric(palette = "YlOrRd", domain = nc$median_income)
nc$median_number_of_kids <- sample(0:5, nrow(nc), replace = TRUE)
pal2 <- colorNumeric(palette = "Blues", domain = nc$median_number_of_kids)
nc$median_weight <- rnorm(nrow(nc), mean = 175, sd = 15)
pal3 <- colorNumeric(palette = "Greens", domain = nc$median_weight)


vars <- list(median_income = pal, median_number_of_kids = pal2, median_weight = pal3)
maps <- list()

for (i in seq_along(vars)) {
  var <- names(vars)[i]
  pal <- vars[[i]]
  map <- leaflet(data = nc) %>%
    addProviderTiles(providers$OpenStreetMap) %>%
    addPolygons(fillColor = ~pal(get(var)),
                fillOpacity = 0.8,
                weight = 1,
                color = "white",
                popup = ~NAME,
                label = ~NAME) %>%
    addLegend(pal = pal,
              values = ~get(var),
              title = paste("Median", var),
              position = "bottomright")
  maps[[i]] <- map
}

map_1 <- maps[[1]]
map_2 <- maps[[2]]
map_3 <- maps[[3]]

mapshot(map_1, file = "map_1.png")
mapshot(map_2,file = "map_2.png")
mapshot(map_3, file = "map_3.png")

img1 <- image_read("map_1.png")
img2 <- image_read("map_2.png")
img3 <- image_read("map_3.png")

combined_img <- image_append(c(img1, img2, img3))

print(combined_img)

image_write(combined_img, path = "combined_maps.png", format = "png")

这些地图的外观如下(注意图例):

我现在想将所有这些地图合并到一个文件中,该文件允许用户在不同地图之间“切换” - 我知道如何使用以下代码执行此操作:

combined_map =  leaflet(data = nc) %>%
    addProviderTiles(providers$OpenStreetMap) %>%
    addPolygons(fillColor = ~pal(median_income),
                fillOpacity = 0.8,
                weight = 1,
                color = "white",
                popup = ~NAME,
                label = ~NAME,
                group = "Median Income") %>%
    addPolygons(fillColor = ~pal2(median_number_of_kids),
                fillOpacity = 0.8,
                weight = 1,
                color = "white",
                popup = ~NAME,
                label = ~NAME,
                group = "Median Number of Kids") %>%
    addPolygons(fillColor = ~pal3(median_weight),
                fillOpacity = 0.8,
                weight = 1,
                color = "white",
                popup = ~NAME,
                label = ~NAME,
                group = "Median Weight (lbs)") %>%
    addLayersControl(overlayGroups = c("Median Income", "Median Number of Kids", "Median Weight (lbs)"),
                     options = layersControlOptions(collapsed = FALSE))

我的问题:代码好像跑了,但是传说却消失了!

我的问题:我试图了解更多关于图例消失的原因以及我可以做些什么来解决这个问题 - 并且我了解到可以将“传单”库与 javascript/html 函数结合起来来修改地图的显示(例如htmlwidgets::onRender("")). 也许这可能是解决传说消失问题的策略?

或者我是否让一切变得过于复杂并且有更简单的方法来做到这一点?

Thanks!

EDIT 1:我发现了一个类似的帖子在R中的传单地图上的不同图层中添加不同的图例 https://stackoverflow.com/questions/37807770/add-different-legends-in-different-layers-on-leaflet-map-in-r并一直在尝试根据我的问题提供的答案来调整代码 - 也许这也可以解决问题?

combined_map = leaflet(data = nc) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addPolygons(fillColor = ~pal(median_income),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Income") %>%
  addPolygons(fillColor = ~pal2(median_number_of_kids),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Number of Kids") %>%
  addPolygons(fillColor = ~pal3(median_weight),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Weight (lbs)") %>%
  addLegend(pal = pal, values = ~median_income, title = "Median Income", position = "bottomright", group="Median Income") %>%
  addLegend(pal = pal2, values = ~median_number_of_kids, title = "Median Number of Kids", position = "bottomright", group="Median Number of Kids") %>%
  addLegend(pal = pal3, values = ~median_weight, title = "Median Weight (lbs)", position = "bottomright", group="Median Weight (lbs)") %>%
  addLayersControl(overlayGroups = c("Median Income", "Median Number of Kids", "Median Weight (lbs)"),
                   options = layersControlOptions(collapsed = FALSE))

EDIT 2:根据@Alistaire提供的评论中的建议,我尝试修改代码:

combined_map = leaflet(data = nc) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addPolygons(fillColor = ~pal(median_income),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Income") %>%
  addPolygons(fillColor = ~pal2(median_number_of_kids),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Number of Kids") %>%
  addPolygons(fillColor = ~pal3(median_weight),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Weight (lbs)") %>%
  addLegend(pal = pal, values = ~median_income, title = "Median Income", position = "bottomright", group="Median Income") %>%
  addLegend(pal = pal2, values = ~median_number_of_kids, title = "Median Number of Kids", position = "bottomright", group="Median Number of Kids") %>%
  addLegend(pal = pal3, values = ~median_weight, title = "Median Weight (lbs)", position = "bottomright", group="Median Weight (lbs)") %>%
  addLayersControl(baseGroups = c("Median Income", "Median Number of Kids", "Median Weight (lbs)"),
                   options = layersControlOptions(collapsed = FALSE))

我认为这对于地图来说并不常见。您通常会在图例上显示所有图层的所有信息。但是,您应该能够添加 onRender 函数来应用一些逻辑,如果选中相应的控制层,则仅显示图例:

工作示例:https://rpubs.com/Jumble/legends https://rpubs.com/Jumble/legends

leaflet(data = nc) %>%
  addProviderTiles(providers$OpenStreetMap) %>%
  addPolygons(fillColor = ~pal(median_income),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Income") %>%
  addPolygons(fillColor = ~pal2(median_number_of_kids),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Number of Kids") %>%
  addPolygons(fillColor = ~pal3(median_weight),
              fillOpacity = 0.8,
              weight = 1,
              color = "white",
              popup = ~NAME,
              label = ~NAME,
              group = "Median Weight (lbs)") %>%
  addLegend(pal = pal, values = ~median_income, title = "Median Income", position = "bottomright", group="Median Income") %>%
  addLegend(pal = pal2, values = ~median_number_of_kids, title = "Median Number of Kids", position = "bottomright", group="Median Number of Kids") %>%
  addLegend(pal = pal3, values = ~median_weight, title = "Median Weight (lbs)", position = "bottomright", group="Median Weight (lbs)") %>%
  addLayersControl(baseGroups = c("Median Income", "Median Number of Kids", "Median Weight (lbs)"),
                   options = layersControlOptions(collapsed = FALSE)) %>% 
  htmlwidgets::onRender("function(el, x) {
        let map = this;
        let controls = document.getElementsByTagName('input')
        let legends = document.getElementsByClassName('legend') 
        
        function displayLegend(){
          legends[0].style.display = controls[2].checked ? 'block' : 'none'
          legends[1].style.display = controls[1].checked ? 'block' : 'none'
          legends[2].style.display = controls[0].checked ? 'block' : 'none'
        }

        displayLegend()
        map.on('baselayerchange', displayLegend)
  }")

要回答标题中的问题,图例没有出现的原因是因为您省略了addLegend函数,尽管看起来您在编辑中意识到了这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

传说在北卡罗来纳州地理地图上消失? 的相关文章

  • R中的一元加/减是什么?

    来自 R 的详细信息部分Syntax http stat ethz ch R manual R patched library base html Syntax html帮助页面 定义了以下一元和二元运算符 他们被列出 在优先级组中 从最高
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • 绘制点之间的所有线

    我有以下 R 代码 x lt c 0 01848598 0 08052353 0 06741172 0 11652034 y lt c 0 4177541 0 4042247 0 3964025 0 4074685 d lt data fr
  • R 中的快速 QR 分解

    我有大量矩阵 需要对其执行 QR 分解并存储生成的 Q 矩阵 进行归一化 以便 R 矩阵在其对角线上具有正数 除了使用之外还有其他方法吗qr 功能 这是工作示例 system time Parameters for the matrix t
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • API 请求和curl::curl_fetch_memory(url, handle = handle) 中的错误:SSL 证书问题:证书已过期

    几天前 我运行了代码几个月 没有任何问题 GET url myurl query 今天我遇到一个错误 Error in curl curl fetch memory url handle handle SSL certificate pro
  • Purrr::map_df() 删除 NULL 行

    使用时purrr map df 我偶尔会传递一个数据框列表 其中一些项目是NULL 当我做 map df 返回行数少于原始列表的数据框 我想发生的事情是这样的map df calls dplyr bind rows 它忽略了NULL价值观
  • 使用 R 选择第一个非 NA 值

    df lt data frame ID c 1 1 1 2 3 3 3 test c NA 5 5 6 4 NA 7 3 NA 10 9 我想创建一个名为 value 的变量 它是每个单独 ID 测试的第一个非 NA 值 对于只有NA的个体
  • 将数据框中重叠的范围合并到唯一的组中

    我有一个 n 行 3 的数据框 df lt data frame start c 178 400 983 1932 33653 end c 5025 5025 5535 6918 38197 group c 1 1 2 2 3 df sta
  • 更改闪亮 R 中的默认浏览器

    我在 RStudio 中使用 01 hello 虽然在 IE 中默认打开程序时它不会显示直方图 但即使在 Chrome 中 滑块也不起作用 我无法滑动条形图并看到直方图中的变化 如何更改 R 中的默认浏览器 以便闪亮启动 Chrome 而不
  • 文本挖掘 pdf 文件/词频问题

    我正在尝试挖掘一篇具有丰富 pdf 编码和图表的文章的 pdf 我注意到 当我挖掘一些 pdf 文档时 我得到的高频词是 phi taeoe toe sigma gamma 等 它与某些 pdf 文档配合良好 但与其他文档配合使用时却得到这
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 如何从 R keras 中的类似生成器的数据中评估()和预测()

    我有以下代码 数据集可以下载here https www dropbox com s qjt5o31oyqj10m8 data tar gz dl 0 or here https www kaggle com c dogs vs cats
  • read_html(url) 和 read_html(content(GET(url), "text")) 之间的区别

    我正在看这个很棒的答案 https stackoverflow com a 58211397 3502164 https stackoverflow com a 58211397 3502164 解决方案的开头包括 library httr
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • R“错误:“}”中出现意外的“}”[重复]

    这个问题在这里已经有答案了 我有一个字符串变量 对于缺少数据的情况 它具有 空值 我想将 空值 重新编码为缺失 而不是说 空值 我正在尝试编写一个循环来删除这些 空值 条目 但我不断收到错误 错误 中出现意外的 for row in dat
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 条件字体颜色 R Markdown

    我无法找到一种方法来根据变量的值 gt 0 0 或 r setup include FALSE x lt 4 This is an R Markdown document r if x gt 0 textcolor red Markdown
  • 无法更改 RStudio 中的 R 版本

    我的 RStudio V 0 99 491 无法更改 R 版本 我以平常的方式行事Global Options gt R Version 然后它挂起并且不再工作或反应 R 运行良好的初始版本是R 3 1 0 我以前从未遇到过这样的问题 也许

随机推荐

  • 如何更改 JavaScript 对象的顺序?

    我的 JavaScript 对象如下所示 ivrItems 50b5e7bec90a6f4e19000001 name sdf key 555 onSelect fsdfsdfsdf 50b5e7c3c90a6f4e19000002 nam
  • TortoiseSVN:如何从提交中忽略 bin 内容

    我使用 TortoiseSVN 1 7 9 我怎么能够ignore remove内容来自 bin文件夹当我svn commit项目文件夹 我不想提交诸如 dll pdb etc I put dll pdb进入svn 忽略属性 但它不起作用
  • 在 PHP / MySQL 中处理未读帖子

    对于个人项目 我需要使用 PHP 和 MySQL 构建一个论坛 我不可能使用已经构建的论坛包 例如phpBB 我目前正在研究构建此类应用程序所需的逻辑 但这已经是漫长的一天了 我正在努力解决为用户处理未读帖子的概念 我的一个解决方案是有一个
  • 尝试在 Expression-Blend 4 中打开在 Visual Studio 2010 中创建的 WPF 项目时出现问题

    我在 VS 2010 中创建 WPF 项目 在完成功能性 GUI 的工作后 我想在 Blend 4 中编辑控件模板 但是当我在 Blend 中以 DesignMode 打开项目时 他告诉我 无效的 XAML 在结果窗口中他写道 Window
  • Java:避免在数组列表中插入重复项

    我是java新手 我有一个ArrayList我想避免插入时重复 我的ArrayList is ArrayList
  • 将值从 C++ MEX 文件返回到 MATLAB

    我正在编写一个从 C 代码中检索数据的 MATLAB 程序 为此 我在 MATLAB 中创建了一个 MEX 文件和一个网关 mexFunction 虽然可以在 MATLAB 中读取读取值 但我无法检索它来使用它 如果不清楚 我有与这里完全相
  • 从 PYCHARM 运行时使 PYTEST 更安静

    更新 下面显示的消息不受 pytest 各种 q 安静选项控制 它们来自 TeamCity 插件 请参阅下面我的回答 原文 我已经阅读了用于沉默 pytest 的现有堆栈溢出答案 但没有人告诉我如何沉默我收到的大量冗余 测试通过 消息 我有
  • 如何在 Mongoose 中定义排序函数

    我正在开发一个小型 NodeJS Web 应用程序 使用 Mongoose 访问我的 MongoDB 数据库 我的收藏的简化架构如下 var MySchema mongoose Schema content type String loca
  • ASP.Net 将 401 错误代码转换为 302 错误代码

    我有一个自定义处理程序 在某些情况下 我想向用户代理表明他们未获得授权 Http 错误代码 401 if IsAuthorized context context Response StatusCode 401 context Respon
  • 使用表达式树构造 LINQ GroupBy 查询

    我已经在这个问题上坚持了一个星期了 但没有找到解决方案 我有一个像下面这样的 POCO public class Journal public int Id get set public string AuthorName get set
  • PHP/PDO 和 SQL Server 连接以及 i18n 问题

    在我们的网络应用程序中 我们使用 PHP5 2 6 PDO 连接到 SQL Server 2005 数据库并存储俄语文本 数据库排序规则是Cyrillic General CI AS 表排序规则是Cyrillic General CI AS
  • VB6 ActiveX exe - 正确的注册顺序是什么?

    我最近更新了一个 Visual Basic 6 应用程序 它是一个 ActiveX exe 在 Windows XP 上运行 我有几个此应用程序的测试人员 他们已收到 exe 的副本并正在尝试运行它 但是 他们收到一条错误消息 Unexpe
  • 从 Redux 状态删除一个项目

    我想知道如果可能的话你是否能帮我解决这个问题 我正在尝试从 Redux 状态中删除一个项目 我已经传入了用户点击的项目的IDaction data进入减速机 我想知道如何匹配action data使用 Redux 状态中的 ID 之一 然后
  • 从 UIScrollView 中删除所有子视图?

    如何从 UIScrollview 中删除所有子视图 Let scrollView是一个实例UIScrollView 在 Objective C 中 这非常简单 只需致电makeObjectsPerformSelector 像这样 Objec
  • SQL Server 2005 中的计数(*) 与计数(Id)

    我使用 SQLCOUNT函数获取表中的总数或行数 以下两种说法有什么区别吗 SELECT COUNT FROM Table and SELECT COUNT TableId FROM Table 另外 在性能和执行时间方面有什么区别吗 Th
  • 设置 MySQL 触发器

    我听说过有关触发器的事情 我有几个问题 什么是触发器 我该如何设置它们 除了典型的 SQL 内容之外 是否还应该采取任何预防措施 触发器允许您在发生某些事件 例如 插入表 时在数据库中执行某个功能 我无法具体评论mysql 注意事项 触发器
  • 在字符串数组中查找下一个可用日期

    我一直在尝试找出如何根据当前日期获取下一个可用日期 即 如果今天是星期五 则在数组中搜索下一个最近的日期 例如数组值为 1 星期一 2 星期二 4 星期四 6 星期六 那么我的第二天应该是星期六 这是我尝试过的 Here i ll get
  • RecyclerView 上的删除按钮删除了错误的项目

    我正在使用 Firestore 适配器RecyclerView我在使用 删除 按钮时遇到问题 当我按下它时 它会删除错误的项目 而不是我想要的项目 这是我的按钮内部的代码onBindViewHolder protected void onB
  • 了解单目标迷宫的 A* 启发式

    我有一个像下面这样的迷宫 P
  • 传说在北卡罗来纳州地理地图上消失?

    我正在使用 R 编程语言 使用北卡罗来纳州的内置地图 我生成了 3 个随机变量 收入 孩子数量 体重 然后为此数据创建了地图 使用 传单 库 通过循环 library sf library mapview library leaflet l