Masoud
Masoud

Reputation: 615

How to set custom color in AddTimeLine

I am trying to create a time line plot using leaflet and leaftime packages. I want to set custom color in addTimeline to specify each point to his groups, as follows:

library(leaflet)
library(leaftime)
library(geojsonio)

power_d <- data.frame(
  "Latitude" = c(
    33.515556, 38.060556, 47.903056, 49.71, 49.041667, 31.934167,
    54.140586, 54.140586, 48.494444, 48.494444
  ),
  "Longitude" = c(
    129.837222, -77.789444, 7.563056, 8.415278, 9.175, -82.343889,
    13.664422, 13.664422, 17.681944, 17.681944
  ),
  "start" = seq.Date(as.Date("2015-01-01"), by = "day", length.out = 10),
  "end" = seq.Date(as.Date("2015-01-01"), by = "day", length.out = 10) + 1,
color_temp=rep(c("red","blue","green"),len=10)
)

power_geo <- geojsonio::geojson_json(power_d ,lat="Latitude",lon="Longitude")

leaflet() %>%
  addTiles() %>%
  setView(44.0665,23.74667,2) %>%
  addTimeline(data = power_geo,
  timelineOpts = timelineOptions(
      styleOptions = styleOptions(
    radius = 5,     
    color=color_temp,
    fillColor = color_temp,
    fillOpacity = 1
      )
    )
)

Unfortunately I got following error:

Error in lapply(x, f) : object 'color_temp' not found

I also try replacing color_temp with power_d$color_temp, the code run without error, but the color of points do not change. The color arguments not work in above code, why? and how to fix it?

Upvotes: 1

Views: 149

Answers (1)

user20650
user20650

Reputation: 25914

It doesn't seem as if you can pass a vector of colours with the standard styleOptions, however, an example from the help page for ?addTimeline show how you can add colours based on the data using a little JavaScript (which thankfully is provided in the example).

Using the example that starts "# to style each point differently based on the data" you need to change it slightly to point to your colour vector e.g. change data.properties.color to data.properties.color_temp. Running the code below leads to

enter image description here

# code
leaflet(power_geo) %>%
  addTiles() %>%
  setView(44.0665,23.74667,2) %>%
  addTimeline(
    timelineOpts = timelineOptions(
      styleOptions = NULL, 
      pointToLayer = htmlwidgets::JS(
"
function(data, latlng) {
  return L.circleMarker(
    latlng,
    {
      radius: 25,
      color: data.properties.color_temp,
      fillColor: data.properties.color_temp,
      fillOpacity: 1
    }
  );
}
"
      )
    )
  )

Upvotes: 3

Related Questions