2016-05-23 2 views
1

Я пытаюсь представить все деревья, присутствующие в Центральном Мельбурне. Набор данных, который я использую, можно найти здесь - Urban Forest DataИнтеграция блестящих с лифтом

Мне удастся запечатлеть все деревья, присутствующие в наборе данных, а также цвет, закодированный в соответствии с их ожидаемой продолжительностью жизни.

Мне было интересно, как я могу интегрировать это с помощью Shiny, чтобы я мог фильтровать сюжет по столбцу «Участок». То есть, когда я выбираю «CBD», он должен отображать только деревья в этой области. Мой код до сих пор и скриншот рабочего участка, как показано ниже:

Код:

library(leaflet) 
library(dplyr) 
library(readr) 
td <- read.csv("treedata.csv", header = TRUE) 

pal <- colorNumeric(
    palette = "RdYlGn", 
    domain = td$LifeExpectencyValue 
) 

leaflet(td) %>% addTiles(
    urlTemplate = 'http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', 
    attribution='Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' 
) %>% addCircleMarkers(radius= 5,fillOpacity = 0.5, stroke = FALSE,color=~pal(LifeExpectencyValue), 
               popup=paste("Name:", td$CommonName, "<br>", "Years Left:", td$LifeExpectency, "<br>", "Genus:", td$Genus) 

) %>% addLegend(pal = pal, values = ~LifeExpectencyValue, opacity = 1, title = "Life Expectancy") 

Скриншот участка: enter image description here

Я новичок в Блестящая поэтому любая помощь здесь глубоко оценена.

UPDATE:

Блестящий Код Пробовал:

require(rCharts) 
library(shiny) 

ui <- fluidPage(
    selectInput("precinct", 
       label="Precinct", 
       choices = sort(td$Precinct), 
       selected = "CBD"), 
    plotOutput("treedat") #Giving an input name and listing out types to choose in the Shiny app 
) 

server <- function(input, output){ 

    output$treedat <- renderLeaflet({ 
    PRECINCT = input$precinct 
    precinct = subset(td, precinct == PRECINCT) 
    td2 <- leaflet(td) %>% addTiles(
     urlTemplate = 'http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', 
     attribution='Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' 
    ) %>% addCircleMarkers(radius= 5,fillOpacity = 0.5, stroke = FALSE,color=~pal(LifeExpectencyValue), 
          popup=paste("Name:", td$CommonName, "<br>", "Years Left:", td$LifeExpectency, "<br>", "Genus:", td$Genus) 

    ) %>% addLegend(pal = pal, values = ~LifeExpectencyValue, opacity = 1, title = "Life Expectency") 
    return(td2) 
    }) 
} 
shinyApp(ui = ui, server = server) 

Получение ошибки говоря объект 'Участковая' не найден.

ответ

2

Пару точек

  1. Вы используете leaflet в вашем коде, но rCharts в вашем приложении. Здесь я просто использую leaflet в блестящем приложении. (И, насколько я знаю, rCharts еще не по CRAN?)

  2. Варианты, которые заполняют раскрывающийся список, основаны на данных. Поэтому я переместил selectInput на сервер, используя renderUI/UIOutput. Я также использую as.chacter вокруг выбора, так что вы видите символьное представление, а не уровни factor

Я также удалил код, что цвета деревьев, как нет столбца называется LifeExpectancy в исходных данных (Я предполагаю, что вы где-то очистили заголовки столбцов?)

И, наконец, несколько небольших изменений в том, как вы подсетете свои данные, и вам хорошо идти.

library(leaflet) 
library(shiny) 

ui <- fluidPage(
    uiOutput("precinct"), 
    leafletOutput("treedat") #Giving an input name and listing out types to choose in the Shiny app 
) 

server <- function(input, output){ 

    # td <- read.csv("~/Desktop/Melbourne_s_Urban_Forest_Tree_data.csv", header = T) 

    output$precinct <- renderUI({ 

    choices <- as.character(unique(td$Precinct)) 
    choices <- c('All', choices) 
    selectInput(inputId = "precinct", label = "Precinct", choices = choices, selected = "CBD") 

    }) 


    output$treedat <- renderLeaflet({ 

    ## get the choice from teh drop-down box 
    PRECINCT = input$precinct 

    ## supbset the data based on the choice 
    if(PRECINCT != 'All'){ 
     td2 <- td[td$Precinct == PRECINCT, ] 
    }else{ 
     td2 <- td 
    } 
    ## plot the subsetted ata 
    td2 <- leaflet(td2) %>% addTiles(
     urlTemplate = 'http://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}.png', 
     attribution='Map tiles by <a href="http://stamen.com">Stamen Design</a>, <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> &mdash; Map data &copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>') %>% 
     addCircleMarkers(radius= 5,fillOpacity = 0.5, stroke = FALSE) 
    return(td2) 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

Это работало как очарование! Большое спасибо за подробное объяснение. Всегда сомневался в том, что Листовка и коллектив работают вместе. Просто подумайте над этим, как добавить в раскрывающийся список параметр «Все», чтобы он отображал все области? –

+0

См. Мое редактирование – SymbolixAU

+0

Прекрасно работает! Только то, что я хотел! Спасибо –

Смежные вопросы