Popup auf eine Form mit tmap

Habe ich eine Karte gemacht unsing tmap in ein glänzend-app mit leaflet. Ich habe ungefähr das, was ich will: eine thematische Landkarte mit Farbe ausfüllen, basierend auf ein SpatialPolygonsDataFrame, und wenn Sie klicken Sie auf die Karte, wird ein popup mit zusätzlichen Informationen auf das polygon. Ich möchte den popup für ein besseres layout beim klicken. Standardmäßig, ist der name in dem Datensatz angezeigt wird, aber es ist nicht wirklich Benutzer freundlich.

Hier ist ein reproduzierbares Beispiel.

library(tmap)
library(leaflet)

data(Europe)

tmap_mode("view")
carte <- tm_shape(Europe) +
  tm_borders(alpha = 0.5) +
  tm_fill(col = "well_being",
          id = "name",
          popup.vars = c("life_exp","well_being"))
tmap_leaflet(carte)

Ich habe versucht, die Namen der Vektor (popup.vars = c("Life Expectancy" = "life_exp", "Well being" = "well_being), aber das funktioniert nicht.

Ich habe auch versucht, um das popup auf einen Anruf zu leaflet::addPolygons, aber ich bekomme eine Fehlermeldung.

carte2 <- tm_shape(Europe) +
  tm_borders(alpha = 0.5) +
  tm_fill(col = "well_being")

nom <- Europe$name

tmap_leaflet(carte2) %>% 
  addPolygons(layerId = nom,
    popup = paste0("<b>",~name,"</b><br/>Life Expectancy : ",
                           ~life_exp," <br/>Well being : ", ~well_being))

Fehler in derivePolygons(Daten, lng, lat, fehlt(lng), fehlenden(lat), „addPolygons“) :
Polygon-Daten nicht gefunden; bitte geben Sie addPolygons mit Daten-und/oder lng/lat Argumente

Dank

  • Können Sie nicht einfach ändern-Variablen‘ name in dem dataset?
  • Ich könnte es, aber die Verwendung der Daten für andere Grafiken, und würde neu schreiben müssen andere Funktionen. Und ich hätte gerne eine feinere Kontrolle über das popup, wenn möglich (zum Beispiel ich weiß nicht, wie die Komma-Trennung für zahlen mit mehr als 3 Ziffern).
  • Toller Vorschlag Vektor-Namen. Ich werde diese Arbeit machen.
InformationsquelleAutor FlorianGD | 2017-01-30



2 Replies
  1. 7

    In der development-version, Vektor-names-popup.vars sind jetzt als Etiketten. Auch ich habe Hinzugefügt popup.format zu jedes-layer-Funktion. Sie können die Formatierung für jede variable separat.

    data(World, metro)
    metro$growth <- (metro$pop2020 - metro$pop2010) / (metro$pop2010 * 10) * 100
    
    ttm()
    tm_shape(metro) +
        tm_bubbles("pop2010", col = "growth", 
                   border.col = "black", border.alpha = .5, 
                   style="fixed", breaks=c(-Inf, seq(0, 6, by=2), Inf),
                   palette="-RdYlBu", contrast=1, 
                   title.size="Metro population", 
                   title.col="Growth rate (%)", id="name", 
                   popup.vars=c("Population (2010)"="pop2010", "Population (2020)"="pop2020", "Growth (%)"="growth"),
                   popup.format=list(growth=list(digits=4)))

    Popup auf eine Form mit tmap

    • Super!!! Vielen Dank dafür, ich werde warten, bis es gedrückt wird, um CRAN-in meinen app.
  2. 3

    Haftungsausschluss: Hack

    Beginnen werde ich mit der Warnung, dass dies ein hack ist, aber der code soll erreichen Ihr Ziel. Vielleicht, Datei ein Problem auf der tmap repo für zusätzliche popup-Optionen.

    library(tmap)
    
    data(Europe)
    
    carte2 <- tm_shape(Europe) +
      tm_borders(alpha = 0.5) +
      tm_fill(col = "well_being")
    
    # this is a hack, since I do not see a clean mechanism to accomplish
    # look at the leaflet map calls for addPolygons
    leafmap <- tmap_leaflet(carte2)
    
    # if you are ok using another package
    # install.packages("listviewer")
    # listviewer::jsonedit(leafmap$x$calls)
    
    # if not then
    str(leafmap$x$calls, max.level=2)
    
    # addPolygons is the call we need to adjust
    #  in this example it is the fourth call
    str(leafmap$x$calls[[4]], max.level=2)
    # the popups are the fifth element of the args
    leafmap$x$calls[[4]]$args[[5]]
    # adjust these how you like
    leafmap$x$calls[[4]]$args[[5]] <- leaflet:::evalFormula(
      ~paste0(
        "<b>",name,"</b><br/>",
        "Life Expectancy : ", life_exp,
        " <br/>Well being : ", format(well_being, digits=4)
      ),
      data=Europe
    )
    
    # warned this is a hack

    Popup auf eine Form mit tmap

    • Super!!! Es ist zwar ein hack, aber es funktioniert gut. Ich werde die Datei ein Problem auf der tmap repo. Danke!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.