(Btw, c'è un altro pacchetto che avrebbe fatto quello che voglio?)Leaflet in R: Come creare strati e colori per ogni livello di fattore in dataframe
Ecco il mio set di dati:
> head(df)
id groupID lat lon
511 1 277706 -10.89834 -37.05893
377 2 277706 -10.88870 -37.07695
98 3 277705 -10.89050 -37.09406
392 4 277697 -10.92131 -37.10525
6 5 277705 -10.89050 -37.09406
364 6 277697 -10.93730 -37.11600
I voglio usare il volantino per tracciare ogni riga su una mappa in base alla loro latitudine e longitudine. Addizionalmente, ogni marcatore (o popup o CircleMarker) dovrebbe avere un colore e uno strato diversi in base alla variabile groupID.
Il problema è che i dati cambiano ogni giorno e non so quanti diversi livelli univoci avrò per la variabile groupID. In questo set di dati campione ci sono 12 livelli, ma può variare da 5 a circa 30. Gli esempi nello documentation funzionano con un numero predefinito di livelli.
Ecco che cosa ho provato:
colorsmap = colors()[1:length(unique(df3$groupID))]
groupColors = colorFactor(palette = "RdYlBu", domain = df3$groupID)
leaflet(data = df3) %>%
addTiles() %>%
addCircleMarkers(lng = ~lon, lat = ~lat, color = ~groupColors(groupID),
group = ~groupID) %>%
#addLegend(position = "topright", pal = groupColors, values = ~groupID) %>%
addLayersControl(~groupID)
Esso fornisce una trama, ma quando seleziono un solo livello, gli altri non si disapper come dovrebbero:
immagine:
Il set di dati in sé:
> dput(df3)
structure(list(id = 1:20, groupID = c(277698L, 277715L, 277704L,
277706L, 277705L, 277705L, 277719L, 277705L, 277705L, 277709L,
277706L, 277705L, 277704L, 277706L, 277715L, 277702L, 277719L,
277706L, 277715L, 277706L), lat = c(-10.8172615660655, -10.8904055150991,
-10.8887597563482, -10.90203509, -10.9001514, -10.8997748900025,
-10.8960177351343, -10.8896179908615, -10.8991450456802, -10.9224848475651,
-10.9000373151094, -10.8905013650562, -10.8889438100208, -10.90,
-10.8861897462579, -10.9326053452642, -10.8916601751623, -10.902075281944,
-10.8822231928033, -10.9079483812524), lon = c(-36.9248145687343,
-37.0665064455395, -37.0921721937304, -37.05829295, -37.0969278,
-37.0976847916125, -37.0840372102666, -37.0963566353117, -37.0945971936751,
-37.0549293249471, -37.066113628594, -37.0940632483155, -37.095505683692,
-37.0590422449149, -37.0782556623101, -37.0698746017798, -37.0841003949028,
-37.0593363285999, -37.0724709841895, -37.0817244836096)), .Names = c("id",
"groupID", "lat", "lon"), row.names = c(20L, 23L, 8L, 36L, 14L,
13L, 16L, 2L, 11L, 1L, 26L, 6L, 5L, 31L, 22L, 50L, 17L, 34L,
25L, 42L), class = "data.frame")