Ползунок для карты разброса, проблемы с отображением данных - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь создать карту, используя plotly в R, и я хотел бы вставить ползунок на основе года / месяца моих данных. Ползунок отображается, но, похоже, он не меняет данные, отображаемые при его перемещении. Я думал, что это было сделано путем установки steps.args с "visible" равным списку значений ИСТИНА / ЛОЖЬ, которые соответствуют добавленным трассировкам. Я был бы очень признателен, если бы кто-нибудь мог сказать мне, что я делаю неправильно.

Вот мой код, включая загрузку и очистку набора данных, поэтому он должен быть воспроизводимым:

### load and clean data
  library(plotly)
  library(dplyr)
  library(lubridate)

  ##getting the data
  data<- data.frame()
  z<-c(2016,2017,2018,2019,2020)
  for(i in z) {
    url <- paste("http://www.aire.cdmx.gob.mx/opendata/promedios_diarios/promedios_",i,"_ps.csv", sep = "")
    data <- rbind(data, read.csv(url,header = T, skip = 8))
  }
  ##create tibble and summary of tibble
  pm <- tibble(data)
  summary(pm)

  ##clean and arrange data 
  pmclean <- pm %>%
    mutate(datex = strptime(date,"%d/%m/%Y"), 
         month = month(datex), 
         year = year(datex)) %>%
    filter(!is.na(value)) %>%
    select(datex, id_station:value, month, year) %>%
    rename(date = datex)

    ## download Mexico City air quality monitoring station data with lat/long
    url <- "http://www.aire.cdmx.gob.mx/opendata/catalogos/cat_estacion.csv"
      datastations <- tibble(read.csv(url,header = T, skip = 1))

    ##select columns and rename our join column
    stations <- datastations %>%
        select(cve_estac:obs_estac)%>%
        rename(id_station = cve_estac)

    ##join clean PM data with station data
    pmstations<- inner_join(pmclean,stations)
    pm2.5_stations <- subset(pmstations, id_parameter == "PM2.5")

    ## data 
    pm2.5_station <- pm2.5_stations %>% 
      group_by(year, month, id_station, nom_estac, longitud, latitud,alt) %>% 
      summarize("mean" = mean(value))

#########################################################################

### figure

## create field unique for each month
pm2.5_station$yearmonth <- paste(pm2.5_station$year, "/", pm2.5_station$month, sep = "")

##create figure
figx <- pm2.5_station %>% plot_ly(type = 'scattermapbox', mode = 'markers') 

### add traces for each year/month combo
for( i in unique(pm2.5_station$yearmonth)){
  figx <- figx %>% 
    add_trace(type = "scattermapbox",
              lat=pm2.5_station$latitud[pm2.5_station$yearmonth == i], 
              lon=pm2.5_station$longitud[pm2.5_station$yearmonth == i],
              text = pm2.5_station$hovertext[pm2.5_station$yearmonth == i],
              hoverinfo = 'text',
              name= paste(i),
              marker = list(
                color = pm2.5_station$mean[pm2.5_station$yearmonth == i],
                size = pm2.5_station$mean[pm2.5_station$yearmonth == i]))
}


### create steps for slider
daterange <- data.frame(unique(pm2.5_station$yearmonth))
colnames(daterange) <- "x"

steps <- list()
for (i in 1:length(unique(pm2.5_station$yearmonth))) {  
  steps[[i]] <- list(method = "update", 
                     args = list("visible", list(unique(pm2.5_station$yearmonth) == daterange$x[i])),
                     label = daterange$x[i]
  ) 
} 

### layout
figx <- figx %>% layout(
  title = 'map',
  mapbox = list(
    style = 'carto-positron',
    zoom = 10,
    center = list(lon = median(pm2.5_station$longitud), 
                  lat = median(pm2.5_station$latitud))),
  
  sliders = list(
    
    list(
      active = (length(daterange[,])), 
      currentvalue = list(prefix = "Month: "), 
      pad = list(t=60),
      
      steps = steps)
  ))
figx

Заранее спасибо!

...