【发布时间】:2021-08-26 18:17:13
【问题描述】:
我正在尝试根据用户输入滑块突出显示地图中的点。如果该点在某个日期范围内,则更改颜色,如果不是,则默认为黑色。
#server
shinyServer(function(input, output,session) {
output$myMap <- renderLeaflet({
leaflet() %>%
addTiles()%>%
addCircles(data=df,
# ~Longitude,
# ~Latitude,
group = "myMarkers",
label = ~htmlEscape(date))
})
observeEvent(input$selectVariable, {
mydat$col_format<- ifelse(mydat$Date >= input$falltime[1] & mydat$Date <= input$falltime [2],'blue',
ifelse(mydat$Date >= input$springtime[1] & mydat$Date <= input$springtime [2], 'black',
ifelse (mydat$Date, 'yellow')) )
leafletProxy("myMap") %>%
clearGroup("myMarkers") %>%
addCircles(data = df[df$AnimlID == input$selectVariable, ],
#~ mydat$Longitd ,
#~ mydat$Latitud,
group = "myMarkers",
col = mydat$col_format,
label = ~htmlEscape(date)
)
})
})
#ui shinyUI(dashboardPage(#skin = "black",
dashboardHeader(title = "Mapping Test", titleWidth = 350
),
dashboardSidebar(width = 350,
selectInput("selectVariable", label = h4("Select an D:"),
choices = unique(df$id)),
sliderInput("falltime","NSD Fall Slider:",
min = min, max = max, value = c(min, max)),
verbatimTextOutput("dateText"),
sliderInput("springtime","NSD Spring Slider:",
min = min, max = max, value = c(min, max)),
actionButton("submit", ("Submit"))),
dashboardBody(fluidPage(
box( plotOutput("plotlraj")),
box( leafletOutput("myMap")),
box(DT::dataTableOutput("Table"),
)
),
)
))
使用上面的代码,我没有收到任何错误,但地图加载速度确实很慢,而且无论滑块输入设置的日期范围是什么,这些点总是蓝色的。
我也尝试添加此反应块,但同样,即使我更改滑块日期范围,所有点都是蓝色的
colorpal<- reactive({
if(mydat$Date >= input$falltime[1] & mydat$Date <= input$falltime [2]){
mydat[,'seasonColor']<-'#626262'
}
if(mydat$Date >= input$springtime[1] & mydat$Date <= input$springtime [2]){
mydat[,'seasonColor']<-'#BAF218
'
}
【问题讨论】:
-
您需要
ifelse而不是if/else或使用case_when因为if/else未矢量化 -
我建议制作一个响应式 data.frame。它将依赖于
input$selectVariable、input$falltime和input$springtime。在反应函数中,您通过AnimlID进行过滤,并根据falltime 和springtime 值,创建一个包含fall、spring、NA 级别的因子列。然后在该列上colorFactor()。 -
@rbasa 感谢您的建议。你觉得你能举个例子吗??
标签: r shinydashboard shiny-reactivity r-leaflet