带有单选按钮的闪亮反应值
Shiny reactive value with radiobutton
我正在创建一个用于显示等值线图的 Shiny 应用程序。
我想重新更改要在我的地图上使用单选按钮显示的值。
它与普通按钮配合得很好,但我现在正在为单选按钮而苦苦挣扎,有什么想法吗?
你可以通过这个link下载数据:https://www.data.gouv.fr/fr/datasets/r/8b004f01-e7af-40d2-ab4a-8108a8bd24b2
到目前为止,这是我的代码:
sData <- readOGR(dsn = " Set your path to the downloaded Data here")
ui<- bootstrapPage(
leafletOutput("mymap"),
absolutePanel(top = 10,
right = 10,
radioButtons("radio", h3("Indicateurs de mobilité"),
choices = list("AttrOne" = "Attr1",
"AttrTwo" = "Attr2")))
)
server <- function(input, output, session) {
v <- reactiveValues(data = sData$numdep)
observeEvent(input$Attr1, {
v$data <- sData $numdep
})
observeEvent(input$Attr2, {
v$data <- sData $insee
})
output$mymap <- renderLeaflet({
leaflet(sData) %>%
addProviderTiles(
providers$"CartoDB.DarkMatter") %>%
addPolygons(
fillColor = ~colorBin(palette = "YlOrRd",
bins = getBreaks(v$data,
nclass = 6,
method = "fisher-jenks"),
domain = v$data
)(v$data),
weight = 1,
opacity = 0.3,
color = "white",
fillOpacity = 0.3)
})
}
shinyApp(ui = ui, server = server)
至少有一个问题是你 "listening" 错了你的按钮,它应该是你在 ui
中确定的 id
,在你的情况下,"radio" .另外,您可以用一个 observeEvent
来代替您的方式;
ui<- bootstrapPage(
leafletOutput("mymap"),
absolutePanel(top = 10,
right = 10,
radioButtons("radio", h3("Indicateurs de mobilité"),
choices = list("AttrOne" = "Attr1",
"AttrTwo" = "Attr2",
"AttrThree" = "Attr3")))
)
server <- function(input, output, session) {
v <- observeEvent(input$radio,{
if(input$radio=="Attr1"){
v$data <- Df$A1}
if(input$radio=="Attr2"){
v$data <- Df$A2}
if(input$radio=="Attr3"){
v$data <- Df$A4}
})
output$mymap <- renderLeaflet({
leaflet(Df) %>%
addProviderTiles(
providers$"CartoDB.DarkMatter") %>%
addPolygons(
fillColor = ~colorBin(palette = "YlOrRd",
bins = getBreaks(v$data,
nclass = 6,
method = "fisher-jenks"),
domain = v$data
)(v$data),
weight = 1,
opacity = 0.3,
color = "white",
fillOpacity = 0.3)
})
}
shinyApp(ui = ui, server = server)
尽管存在这个错误,但我不能向您保证这会正常工作,因为您的示例不可重现。下次,请提供 dput(Df)
或至少一些行,以便我们可以从头到尾执行您的代码并发现任何其他问题?
使用您的代码:
ui<- bootstrapPage(
leafletOutput("mymap"),
absolutePanel(top = 10,
right = 10,
radioButtons("radio", h3("Indicateurs de mobilité"),
choices = list("AttrOne" = "Attr1",
"AttrTwo" = "Attr2")))
)
server <- function(input, output, session) {
v <- reactiveValues(data = sData$numdep)
observeEvent(input$radio,{
if(input$radio=="Attr1"){
v$data <- sData$numdep
}
if(input$radio=="Attr2"){
v$data <- sData$insee
}
})
output$mymap <- renderLeaflet({
leaflet(sData) %>%
addProviderTiles(
providers$"CartoDB.DarkMatter") %>%
addPolygons(
fillColor = ~colorBin(palette = "YlOrRd",
bins = getBreaks(v$data,
nclass = 6,
method = "fisher-jenks"),
domain = v$data
)(v$data),
weight = 1,
opacity = 0.3,
color = "white",
fillOpacity = 0.3)
})
}
shinyApp(ui = ui, server = server)
最好!
我正在创建一个用于显示等值线图的 Shiny 应用程序。
我想重新更改要在我的地图上使用单选按钮显示的值。
它与普通按钮配合得很好,但我现在正在为单选按钮而苦苦挣扎,有什么想法吗?
你可以通过这个link下载数据:https://www.data.gouv.fr/fr/datasets/r/8b004f01-e7af-40d2-ab4a-8108a8bd24b2
到目前为止,这是我的代码:
sData <- readOGR(dsn = " Set your path to the downloaded Data here")
ui<- bootstrapPage(
leafletOutput("mymap"),
absolutePanel(top = 10,
right = 10,
radioButtons("radio", h3("Indicateurs de mobilité"),
choices = list("AttrOne" = "Attr1",
"AttrTwo" = "Attr2")))
)
server <- function(input, output, session) {
v <- reactiveValues(data = sData$numdep)
observeEvent(input$Attr1, {
v$data <- sData $numdep
})
observeEvent(input$Attr2, {
v$data <- sData $insee
})
output$mymap <- renderLeaflet({
leaflet(sData) %>%
addProviderTiles(
providers$"CartoDB.DarkMatter") %>%
addPolygons(
fillColor = ~colorBin(palette = "YlOrRd",
bins = getBreaks(v$data,
nclass = 6,
method = "fisher-jenks"),
domain = v$data
)(v$data),
weight = 1,
opacity = 0.3,
color = "white",
fillOpacity = 0.3)
})
}
shinyApp(ui = ui, server = server)
至少有一个问题是你 "listening" 错了你的按钮,它应该是你在 ui
中确定的 id
,在你的情况下,"radio" .另外,您可以用一个 observeEvent
来代替您的方式;
ui<- bootstrapPage(
leafletOutput("mymap"),
absolutePanel(top = 10,
right = 10,
radioButtons("radio", h3("Indicateurs de mobilité"),
choices = list("AttrOne" = "Attr1",
"AttrTwo" = "Attr2",
"AttrThree" = "Attr3")))
)
server <- function(input, output, session) {
v <- observeEvent(input$radio,{
if(input$radio=="Attr1"){
v$data <- Df$A1}
if(input$radio=="Attr2"){
v$data <- Df$A2}
if(input$radio=="Attr3"){
v$data <- Df$A4}
})
output$mymap <- renderLeaflet({
leaflet(Df) %>%
addProviderTiles(
providers$"CartoDB.DarkMatter") %>%
addPolygons(
fillColor = ~colorBin(palette = "YlOrRd",
bins = getBreaks(v$data,
nclass = 6,
method = "fisher-jenks"),
domain = v$data
)(v$data),
weight = 1,
opacity = 0.3,
color = "white",
fillOpacity = 0.3)
})
}
shinyApp(ui = ui, server = server)
尽管存在这个错误,但我不能向您保证这会正常工作,因为您的示例不可重现。下次,请提供 dput(Df)
或至少一些行,以便我们可以从头到尾执行您的代码并发现任何其他问题?
使用您的代码:
ui<- bootstrapPage(
leafletOutput("mymap"),
absolutePanel(top = 10,
right = 10,
radioButtons("radio", h3("Indicateurs de mobilité"),
choices = list("AttrOne" = "Attr1",
"AttrTwo" = "Attr2")))
)
server <- function(input, output, session) {
v <- reactiveValues(data = sData$numdep)
observeEvent(input$radio,{
if(input$radio=="Attr1"){
v$data <- sData$numdep
}
if(input$radio=="Attr2"){
v$data <- sData$insee
}
})
output$mymap <- renderLeaflet({
leaflet(sData) %>%
addProviderTiles(
providers$"CartoDB.DarkMatter") %>%
addPolygons(
fillColor = ~colorBin(palette = "YlOrRd",
bins = getBreaks(v$data,
nclass = 6,
method = "fisher-jenks"),
domain = v$data
)(v$data),
weight = 1,
opacity = 0.3,
color = "white",
fillOpacity = 0.3)
})
}
shinyApp(ui = ui, server = server)
最好!