web-dev-qa-db-ja.com

Rのリーフレットでホバーするとポップアップしますか?

私のリーフレットマップは次のようになります。

library(sp)
library(leaflet)
circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
  r = diameter / 2
  tt <- seq(0,2*pi,length.out = npoints)
  xx <- center[1] + r * cos(tt)
  yy <- center[2] + r * sin(tt)
  Sr1 = Polygon(cbind(xx, yy))
  Srs1 = Polygons(list(Sr1), "s1")
  SpP = SpatialPolygons(list(Srs1), 1:1)
  return(SpP)
}
Circle.Town <- circleFun(c(1,-1),2.3,npoints = 100)

df1 <- data.frame(long=c(0.6,1,1.4), lat=c(-2, -.8, -0.2), other=c('a', 'b', 'c'), VAM=c(10,8,6), 
                  type=c('Public', 'Public', 'Private'), id=c(1:3)) %>% 
  mutate(X=paste0('<strong>id: </strong>', 
                  id,
                  '<br><strong>type</strong>: ',
                  type,
                  '<br><strong>VAM</strong>: ',
                  VAM))

# Create a continuous palette function
pal <- colorNumeric(
  palette = "RdYlBu",
  domain = df1$VAM
)

leaflet(height = "400px") %>% 
  addTiles() %>%
  addPolygons(data = Circle.Town, color = 'green',  fillOpacity = .7) %>%
  addCircleMarkers(data = df1, lat = ~lat, lng =~long, 
                   radius = ~VAM, popup = ~as.character(X), 
                   fillColor = ~pal(VAM),
                   stroke = FALSE, fillOpacity = 0.8,
                   clusterOptions = markerClusterOptions()) %>% 
  addLegend(position = "topright",
            pal = pal, values = df1$VAM,
            title = "VAM",
            opacity = 1
  ) %>% 
  setView(lng = 1, lat = -1, zoom = 8)

現在、円の1つをクリックするとポップアップが表示されます。クリックする代わりにマウスをホバーすると情報を取得できますか?理想的には、 this のようなものが欲しいです。

ありがとう!

17
Ignacio

これは、この質問が1年前に提起されて以来、リーフレットパッケージに追加された可能性がありますが、これはlabel引数を介して行うことができます。リーフレットRパッケージバージョン1.1.0を使用しています。

上記のようにデータを読み込みます。

library(sp)
library(leaflet)
library(dplyr)

circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
  r = diameter / 2
  tt <- seq(0,2*pi,length.out = npoints)
  xx <- center[1] + r * cos(tt)
  yy <- center[2] + r * sin(tt)
  Sr1 = Polygon(cbind(xx, yy))
  Srs1 = Polygons(list(Sr1), "s1")
  SpP = SpatialPolygons(list(Srs1), 1:1)
  return(SpP)
}
Circle.Town <- circleFun(c(1,-1),2.3,npoints = 100)

df1 <- data.frame(long=c(0.6,1,1.4), lat=c(-2, -.8, -0.2), other=c('a', 'b', 'c'), VAM=c(10,8,6), 
  type=c('Public', 'Public', 'Private'), id=c(1:3)) %>% 
  mutate(X=paste0('<strong>id: </strong>', 
    id,
    '<br><strong>type</strong>: ',
    type,
    '<br><strong>VAM</strong>: ',
    VAM))

# Create a continuous palette function
pal <- colorNumeric(
  palette = "RdYlBu",
  domain = df1$VAM
)

ただし、ベクトルの代わりにラベルのリストを作成します。

labs <- as.list(df1$X)

次に、lapply引数内のそのリストに対するHTML関数をlabelします。 labelの代わりにpopupを使用することに注意してください。

library(htmltools)
leaflet(height = "400px") %>% 
  addTiles() %>%
  addPolygons(data = Circle.Town, color = 'green',  fillOpacity = .7) %>%
  addCircleMarkers(data = df1, lat = ~lat, lng =~long, 
    radius = ~VAM, label = lapply(labs, HTML), 
    fillColor = ~pal(VAM),
    stroke = FALSE, fillOpacity = 0.8,
    clusterOptions = markerClusterOptions()) %>% 
  addLegend(position = "topright",
    pal = pal, values = df1$VAM,
    title = "VAM",
    opacity = 1
  ) %>% 
  setView(lng = 1, lat = -1, zoom = 8)

この方法は、これに対する回答で説明されていますSO質問: Rおよびリーフレット:ラベルテキストを複数行に配置する方法

リーフレットドキュメントのラベルのHTMLに関する詳細情報があります: https://rstudio.github.io/leaflet/popups.html

9
Chris Holbrook

別の方法は次のとおりです。

_library(leaflet)
library(htmltools)
library(htmlwidgets)

yourmap <- leaflet(height = "400px") %>% 
  addTiles() %>%
  addPolygons(data = Circle.Town, color = 'green',  fillOpacity = .7) %>%
  addCircleMarkers(data = df1, lat = ~lat, lng =~long, 
                   radius = ~VAM, popup = ~as.character(X), 
                   fillColor = ~pal(VAM),
                   stroke = FALSE, fillOpacity = 0.8,
                   clusterOptions = markerClusterOptions()) %>% 
  addLegend(position = "topright",
            pal = pal, values = df1$VAM,
            title = "VAM",
            opacity = 1
  ) %>% 
  setView(lng = 1, lat = -1, zoom = 8)

setwd("~/Desktop/")
saveWidget(yourmap, file="yourmap.html")
_

デスクトップでは、HTMLとフォルダがマップの下に保存されます。 /pathTo/yourmap_files/leaflet-binding-1.0.1.9002にあるleaflet.jsファイルを開きます。 leaflet.jsで、var popup = df.get(i, 'popup');まで下にスクロールし、すぐ下に貼り付けます。

_          marker.on('mouseover', function (e) {
    this.openPopup();
});
marker.on('mouseout', function (e) {
    this.closePopup();
});
_

Yourmap.htmlファイルを保存して再度開きます。ポイントの1つにカーソルを合わせます!!

1
MLavoie