r - 在 R 的传单中,可以使用列变量来改变 labelOption 大小、颜色等的大小吗?

标签 r openstreetmap r-leaflet

我正在尝试创建英国一小部分的高质量 map ,没有因使用投影而造成的任何扭曲,并且添加了由文本和符号组成的标记。最终目标是写出 png 或 pdf 文件。可以找到一个更早的相关问题 here .

我已经好几年没用过 R 了,我一直在一堆包中跋涉,试图找到合适的东西。 R 的 Leaflet 很有前途,但尽管我可以使用数据框中的列创建外观不错的 map 、添加标记并改变标记的颜色等,但我无法改变大小、颜色和文本labelOptions 参数中使用的偏移量。

Piccadilly with markers using Leaflet for R

以下可重现的示例显示了我可以实现的目标,以及我没有成功的地方。我希望文本标签的大小根据 df.data$textsizes 列而变化。考虑到 style 参数采用值对列表,这看起来很困难,到目前为止没有任何效果。

如果我希望有人可以建议一种让狡猾的 labelOptions 屈服于我的意愿的方法,或者一种完全不同的尝试方法。

require(leaflet)
require(magrittr)

df.entrynames <- c("Entry 1: Some text","Entry 2: More text")
df.lat <- c(51.509898,51.510736)
df.lon <- c(-0.1345093,-0.135190)
df.colors <-c("Blue","Red")
df.sizes <-c(36,12)
df.data <- data.frame(entrynames=df.entrynames,lat=df.lat,lon=df.lon,colors=df.colors,textsizes=df.sizes)
df.data$entrynames <- as.character(df.data$entrynames)
df.data$colors <- as.character(df.data$colors)
df.data$textsizes <- paste(df.data$textsizes,"px",sep="")

leaflet() %>% setView(lng = -0.134509, lat = 51.509898, zoom = 17) %>% addTiles() %>%
       addCircleMarkers(data = df.data,
              lat = ~lat, lng = ~lon,
              label = df.data$entrynames,
              color = df.data$colors,
              labelOptions = labelOptions(noHide = TRUE,
                                          style = list(
                                                        "color" = "gray30",
                                                        "font-family" = "serif",
                                                        "font-style" = "italic",
                                                        "box-shadow" = "3px 3px rgba(0,0,0,0.25)",
                                                        "font-size" = "14px",
                                                        "border-color" = "rgba(0,0,0,0.5)"
                                           ),
                                          textOnly = FALSE,
                                          offset=c(0,0)))

最佳答案

  df.entrynames <- c("Entry 1: Some text","Entry 2: More text")
  df.lat <- c(51.509898,51.510736)
  df.lon <- c(-0.1345093,-0.135190)
  df.colors <-c("Blue","Red")
  df.sizes <-c(36,2)
  df.data <- data.frame(entrynames=df.entrynames,lat=df.lat,lon=df.lon,colors=df.colors,textsizes=df.sizes)
  df.data$entrynames <- as.character(df.data$entrynames)
  df.data$colors <- as.character(df.data$colors)
  df.data$textsizes <- paste(df.data$textsizes,"px",sep="")
  #Add a vector to split the data by     
  df.data$place<-seq(1:nrow(df.data))


  library(purrr)    

#split the data
  ob_place <- df.data %>% 
    split(., .$place)
#make a map
  m <- leaflet() %>% 
    addTiles() 

#Add layers
  names(ob_place) %>%
    purrr::walk(function(df.data) {
      m<<-m %>% #seems like there's supposed to be two carrots here, i had problems without one
        addCircleMarkers(data=ob_place[[df.data]],fillColor=~colors,
                         fillOpacity = 0.6,
                         weight=1,
                         radius=13,
                         color="white",
                         opacity = .6,
                         lng=~lon, lat=~lat,
                         group = "Show All",
                         label = ~entrynames,
                         labelOptions = labelOptions(noHide = T,
                                                     #direction = ~MyDirection, #https://rstudio.github.io/leaflet/popups.html
                                                     textsize = ~textsizes,
                                                     #opacity=~opacity,
                                                     style = list(
                                                       "color"="black",
                                                       "font-family" ="sans-serif",
                                                       "box-shadow" = "3px 3px rgba(0,0,0,0.25)",
                                                       #"font-size" = "12px",
                                                       "border-color" = "rgba(0,0,0,0.5)"
                                                     )))

    })
m

enter image description here

类似于设置 direction标签数

关于r - 在 R 的传单中,可以使用列变量来改变 labelOption 大小、颜色等的大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57332455/

相关文章:

javascript - 通过 R 向传单多边形添加 'click' 事件

r - modalDialog 中的 leafletProxy 未更新

r - 将 R shiny checkboxGroupInput 与其他输入选择相结合

r - 减少EPS格式的地 block 大小

R ggridges 图 - 显示 y 轴刻度和标签

R 在启动时立即崩溃 : caught segfault, 地址(nil),原因 'memory not mapped'

即使使用匿名函数或绑定(bind),注册 OpenLayers 事件时 JavaScript 闭包也会触发循环内的所有内容

javascript - 获取 OSRM 路由的 JSON

javascript - 使用 Leaflet.js 和 OSM 时仅显示美国

R Leaflet层控制与easybutton