Я пытаюсь создать карту, используя 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
Заранее спасибо!