【问题标题】:Shiny Leaflet legend markers same as map markers闪亮的传单图例标记与地图标记相同
【发布时间】:2017-11-08 19:14:01
【问题描述】:

我正在创建一个图例来区分两组圆形标记,它们通过 fillOpacity = 1(填充)或 fillColor = "white"(空)来区分,对应于具有两个级别的 df$aircraft 列。我希望图例有一个填充和空标记来匹配每个。

这似乎是一件简单的事情,但the other question 提出这个问题并没有得到答案。我尝试修改函数/CSS 样式found here,但未能成功分别更改每个图例标记的不透明度或保持笔触颜色(只有内部应该为空)。

这是生成简单地图的代码,标记显示我希望图例的外观(图例不显示):

library(shiny)
library(leaflet)

# create data
df<-data.frame(x=runif(10,20,21), y=runif(10,0,1))
df$aircraft[1:5] <- "C130"
df$aircraft[5:10] <- "B200"

# create map
map = leaflet() %>% addTiles()

# set up shiny app
ui <- leafletOutput("myMap")


server <- function(input, output, session){

  df_c <- filter(df,df$aircraft == "C130")
  df_b <- filter(df,df$aircraft == "B200")

  output$myMap = renderLeaflet({map %>% 
      addCircleMarkers(df_c$x,df_c$y, radius=10, opacity = 1, fillColor = "white") %>%
      addCircleMarkers(df_b$x,df_b$y, radius=10, opacity = 1, fillOpacity = 1) 
    %>%
     addLegend(colors = c("blue", "blue"), labels = c("C130", "B200"))
  })
}

shinyApp(ui, server)

感谢您的帮助。

【问题讨论】:

  • 图例中的方框应该换成相应的圆圈吧?

标签: r shiny leaflet


【解决方案1】:

我为你创建了一些东西,但它有点混乱的 CSS。

library(shiny)
library(leaflet)
library(magrittr)

# create data
df<-data.frame(x=runif(10,20,21), y=runif(10,0,1))
df$aircraft[1:5] <- "C130"
df$aircraft[5:10] <- "B200"

# create map
map = leaflet() %>% addTiles()


# set up shiny app
ui <- bootstrapPage( tags$style(type = "text/css", "html, body {width:100%;height:100%}",
                                "
                                .leaflet-top .leaflet-control {
                                   margin: 0px;
                                }    

                                .leaflet-right {
                                     margin-right: 40px;
                                  }    
                                .full{
                                background-color: blue;
                                border-radius: 50%;
                                width: 20px;
                                height: 20px;
                                float: left;

                                }
                                .circle {
                                background-color: #FFF;
                                border: 3px solid blue;
                                border-radius: 50%;
                                height: 20px;
                                width: 20px;

                                }

                                .leaflet-control i{
                                  margin-right: 25px;
                                }
                                "),
                     leafletOutput("myMap"))



server <- function(input, output, session){

  df_c <- filter(df,df$aircraft == "C130")
  df_b <- filter(df,df$aircraft == "B200")

  output$myMap = renderLeaflet({map %>% 
      addCircleMarkers(df_c$x,df_c$y, radius=10, opacity = 1, fillColor = "white") %>%
      addCircleMarkers(df_b$x,df_b$y, radius=10, opacity = 1, fillOpacity = 1) %>%
      addLegend(colors = c("blue"), labels = c("B200"), className='full')  %>%
      addLegend(colors = c("white"), labels = c("C130"), className = 'circle')

  })
}

shinyApp(ui, server)

输出截图:

【讨论】:

  • 谢谢!我将 CSS 编辑为一个函数,以便我可以通过编程方式更改颜色,但它起作用了!
  • @ZoeyRW:你能分享一下你的最终解决方案吗?
猜你喜欢
  • 2018-03-13
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多