【问题标题】:hcmap with a local file javascript in R Shiny在 R Shiny 中带有本地文件 javascript 的 hcmap
【发布时间】:2019-02-16 15:02:58
【问题描述】:

我正在shiny(ui和服务器)上开发一个应用程序,我想用Highchart包的hcmap函数实现一个地图。但是,在实现地图时,我发现函数 hcmap 与站点存在依赖关系:https://code.highcharts.com/mapdata/

所以我的目标是在不使用互联网连接的情况下以本地方式使用关联的 javascript 文件来实现地图。我尝试了以下解决方案:我从https://code.highcharts.com/mapdata/ 检索了 javascript 文件并将其列在 www 目录中,但它没有给我任何好的结果。这是我使用的代码:

library(shinydashboard)
library(shinydashboardPlus)
library(highcharter)
library(shiny)

shinyUI(

dashboardPagePlus(
dashboardHeader(),
dashboardSidebar(),
dashboardBody(
fluidRow(box(width = 6,title="map",highchartOutput("map")))
    )
        )
          )

shinyServer(function(input, output) {

output$map=renderHighchart({
data_fake=data.frame(code=c("RZ","MT","TD","OR","FB","SM","MK","DA"
,"GE","LB","OD","TO","TH","GB","CO","GC"),
value=c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
                 )

hcmap(map=tags$head(tags$script(src="map.js")), data = data_fake, value = 
"value",joinBy = c("hc-a2", "code"), name = "Fake 
data",download_map_data=FALSE,
dataLabels = list(enabled = TRUE, format = '{point.name}'),
borderColor = "gray", borderWidth = 0.9,
tooltip = list(valueDecimals = 2, valuePrefix = "DH", valueSuffix = " 
MAD"))%>% hc_mapNavigation(enabled = TRUE)
})

})

我希望输出是一个地图,但不依赖于https://code.highcharts.com/mapdata/ 站点,即在我的应用程序目录中以本地方式使用 javascript 文件。

使用我使用的代码映射结果:

【问题讨论】:

    标签: javascript r shiny


    【解决方案1】:

    让我们尝试另一个环岛

    1. 使用trace(hcmap, edit=T) 修改hcmap 以将您想要的地图作为对象:

    像这样:

     if (download_map_data) {
        mapdata <- download_map_data(map)
        return(mapdata)
      }
    
    1. 在编辑窗口中点击保存并执行:my_map &lt;- hcmap("countries/us/us-all-all")将美国地图更改为您想要的地图。

    2. 将 my_map 保存为 RDS:saveRDS(my_map, "my_map.RDS")

    3. 再次编辑 hcmap:trace(hcmap, edit=T),现在您想读取存储的地图而不是下载它:

      if (download_map_data) { mapdata <- readRDS("my_map.RDS") }

    4. 在编辑窗口中点击保存并执行您想要的地图:

      p% hc_colorAxis(dataClasses = color_classes(c(seq(0, 10, by = 2), 50))) %>% hc_legend(布局=“垂直”,对齐=“右”, 浮动 = TRUE,valueDecimals = 0,valueSuffix = "%") p

    一切都好,我会离线做的!

    【讨论】:

    • 在你的代码中使用这个想法时,记住不要把 download_map_data 设置为 false!
    • JonnyCrunch,智能解决方案,你说得对,它可以离线完美运行。非常感谢。
    【解决方案2】:

    拉莫斯!

    如果您的 Shiny 使用的地图数量有限,为什么不先将其存储为 RDS,以便以后离线检索它们?

    data(unemployment)
    
    p<-hcmap("countries/us/us-all-all", data = unemployment,
             name = "Unemployment", value = "value", joinBy = c("hc-key", "code"),
             borderColor = "transparent") %>%
      hc_colorAxis(dataClasses = color_classes(c(seq(0, 10, by = 2), 50))) %>% 
      hc_legend(layout = "vertical", align = "right",
                floating = TRUE, valueDecimals = 0, valueSuffix = "%") 
    
    saveRDS(p, "foo.RDS")
    

    【讨论】:

    • JonnyCrunch! ,我很欣赏你的想法,但不幸的是,问题是我有动态数据,突然当我将卡保存在本地文件.RDS 中时,我将失去更改数据的机会,突然我遇到了同样的问题,即使用上网恢复一张新卡,我将在其中填充新数据。我尝试保存过时的卡并在之后使用它,但它给我的结果与上面的屏幕截图相同。
    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2022-06-15
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多