如何将长文本字符串包装在tmap HTML多边形弹出窗口或固定宽度中? tmap可以识别换行符吗?

问题描述

我在R中使用tmap包(v。3.0,我也尝试了v。3.2)来制作HTML映射。我有一个数字和字符文本字段的空间多边形。在我的一些文本字段中,我有一个项目列表,这些列表用分号(;)分隔。对于其中的某些多边形,文本字符串是如此之长,以至于弹出窗口可能比HTML窗口宽。我必须缩小地图才能看到这些弹出窗口的内容

我试图在这些文本字符串中加入断点,以便在该数据字段中为弹出窗口添加新行,但是tmap无法识别它们。 \n之类的中断不会在弹出窗口中创建新行。

下面是一个示例,尝试向称为long_names的列及其输出添加不同类型的中断:

# install latest version of `tmap` and `tmaptools`
# library(remotes)
# install_github("mtennekes/tmaptools")
# install_github("mtennekes/tmap")

# load libraries
  library(sf)
  library(raster)
  library(spData)
  library(tmaptools)
  library(tmap)

# use spData dataset called nz
# add example row with long list of names
  nz$long_names <- 'long name 1; long name 2; long name 3; long name 4; long name 5'

# try to make multiple lines in string for the popups
# try different codes for breaks
  nz$long_names_n <- gsub("; ","\n",nz$long_names)
  nz$long_names_r <- gsub("; ","\r",nz$long_names)
  nz$long_names_br1 <- gsub("; ","<br/>",nz$long_names)
  nz$long_names_br2 <- gsub("; ","<br>",nz$long_names)

# change tmap to view mode
  tmap_mode("view")
 
# plot interactive map
  tm_shape(nz) +
    tm_fill()

输出屏幕截图:long string in HTML popup and it doesn't wrap

在我的真实数据集中,long_names中列出的项目数量不同,因此,我希望弹出窗口的长度不同(并且向上滚动和向下滚动很好),但宽度相似。

我还尝试将tmap_leaflet()popupOptions()配合使用来调整最大弹出窗口宽度,但是它忽略了它,并给了我与以前相同的地图:

# interactive map
  map1 <- tm_shape(nz) +
          tm_fill()

# convert to leaflet object
  lf <- tmap_leaflet(map1)

# assign minimum and maximum width to popup options
  lf <- lf %>% leaflet::popupOptions(minWidth = 50,maxWidth = 50)
# view leaflet version
  lf

输出

$maxWidth
[1] 50

$minWidth
[1] 50

$maxHeight

$autopan
[1] TRUE

$keepInView
[1] FALSE

$closeButton
[1] TRUE

$className
[1] ""

屏幕截图:same result as before with popup being too wide

我也尝试过popup.format = list(),但是我认为它不起作用,因为数据不是数字的(请参见popup.format下的here)。如果我错了,请纠正我。在同一链接legend.format下,它说我可以放入函数,但是我不知道如何使这些用分号分隔的字符串起作用。

# plot interactive map
  tm_shape(nz) +
  tm_fill(popup.format = list(long_names=list(maxWidth=50)))

错误

格式C(x = c(12500.5611491,4941.5725565,23900.0363831,12071.1446886,:未使用的参数(maxWidth = 50)

我的关键问题:

  1. 是否可以使用tmap将文本包装在弹出窗口中,或者让tmap识别字符串中的新换行符?
  2. 如果没有,如何使用tm_leaflet()leaflet修改tmap弹出选项?我的实际数据集在多边形内有30个字段,而有6个数据字段存在此问题-包括每个列表中不同数量的项目-因此,我想这样做而不必尽可能地单独输入所有30个数据字段(请参阅here)。
  3. 或者,是否可以在弹出窗口中包含从左到右的滚动条?

非常感谢您的帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...