如何在 R 的 plotly scattermapbox 中使用自定义标记符号
How to use a custom marker symbol in plotly scattermapbox for R
我目前正在开发一个使用交互式地图的闪亮小应用程序。这个想法非常简单:我正在尝试使用 lat/long 坐标在地图中绘制一些点。我不能使用google的API,所以我使用plotly的散点图,指定地图布局。
这是我目前拥有的一般表示:
fig <- plotly::plot_ly(
data = data,
lat = data$lat,
lon = data$long,
mode = "markers",
marker = list(size = 10),
type = 'scattermapbox',
hovertext = paste0(
paste0("Some info 1: ", data$field1, "\n"),
paste0("Some info 2: ", data$field2, "\n"),
paste0("Some info 3: ", data$field3)
)
)
# specify layout as open street map
fig <- fig %>%
layout(
mapbox = list(
style = 'open-street-map',
zoom = 3,
center = list(lat = -20.72623, lon = -47.74942))
)
print(fig)
考虑到我的“数据”数据集有字段和坐标,我得到的结果是这样的:
我无法做的是更改标记符号。根据 plotly 的文档(https://plotly.com/r/reference/#scatter-mode),它就像定义 symbol = "some_symbol" 一样简单,但这是行不通的。我看过一些示例和一些解决方法,但 none 似乎非常直观。
理想情况下,我想生成如下所示的地图:
有谁知道这是否可以通过简单的散点图实现?还有别的办法吗?我在这里遗漏了什么吗?
虽然使用了不同的包,但我找到了解决方案。
使用 leaflet
包,我能够使用相同的 open-street-map
布局创建地图。默认标记 symbol/icon 是一个图钉,但您可以使用 svg 文件创建您想要的任何自定义图标。指定传单文档
here.
我的具体解决方案是将悬停文本定义为一组标签,然后简单地调用 leaflet
对象内的 addMarkers
函数。
labels <- lapply(seq(nrow(data)), function(i) {
paste0( '<p><b> Some information: ', data[i, "field1"], '</b></p>',
"<p> Some other information : ", data[i, "field2"] / 1000, ' MWm </p>',
"<p> Some different information : ", data[i, "field3"],'</p>')
})
fig <- leaflet::leaflet(data = data) %>% leaflet::addTiles() %>%
leaflet::addMarkers(
~as.numeric(longitude),
~as.numeric(latitude),
label = lapply(labels, htmltools::HTML)
)
print(fig)
我目前正在开发一个使用交互式地图的闪亮小应用程序。这个想法非常简单:我正在尝试使用 lat/long 坐标在地图中绘制一些点。我不能使用google的API,所以我使用plotly的散点图,指定地图布局。
这是我目前拥有的一般表示:
fig <- plotly::plot_ly(
data = data,
lat = data$lat,
lon = data$long,
mode = "markers",
marker = list(size = 10),
type = 'scattermapbox',
hovertext = paste0(
paste0("Some info 1: ", data$field1, "\n"),
paste0("Some info 2: ", data$field2, "\n"),
paste0("Some info 3: ", data$field3)
)
)
# specify layout as open street map
fig <- fig %>%
layout(
mapbox = list(
style = 'open-street-map',
zoom = 3,
center = list(lat = -20.72623, lon = -47.74942))
)
print(fig)
考虑到我的“数据”数据集有字段和坐标,我得到的结果是这样的:
我无法做的是更改标记符号。根据 plotly 的文档(https://plotly.com/r/reference/#scatter-mode),它就像定义 symbol = "some_symbol" 一样简单,但这是行不通的。我看过一些示例和一些解决方法,但 none 似乎非常直观。
理想情况下,我想生成如下所示的地图:
有谁知道这是否可以通过简单的散点图实现?还有别的办法吗?我在这里遗漏了什么吗?
虽然使用了不同的包,但我找到了解决方案。
使用 leaflet
包,我能够使用相同的 open-street-map
布局创建地图。默认标记 symbol/icon 是一个图钉,但您可以使用 svg 文件创建您想要的任何自定义图标。指定传单文档
here.
我的具体解决方案是将悬停文本定义为一组标签,然后简单地调用 leaflet
对象内的 addMarkers
函数。
labels <- lapply(seq(nrow(data)), function(i) {
paste0( '<p><b> Some information: ', data[i, "field1"], '</b></p>',
"<p> Some other information : ", data[i, "field2"] / 1000, ' MWm </p>',
"<p> Some different information : ", data[i, "field3"],'</p>')
})
fig <- leaflet::leaflet(data = data) %>% leaflet::addTiles() %>%
leaflet::addMarkers(
~as.numeric(longitude),
~as.numeric(latitude),
label = lapply(labels, htmltools::HTML)
)
print(fig)