Я хочу создать реактивную блестящую карту мира с r, используя фрейм данных пространственных полигонов. Идея состоит в том, чтобы иметь ползунок с разными годами, который можно перемещать и использовать в качестве входа для раскраски стран. Моя проблема заключается в том, чтобы сделать данные реагирующими, когда я запускаю код, который прикреплен под ползунком, берутся входные значения (например, для всех стран значение 2004) и сообщение об ошибке "Предупреждение в pal (input $ year) ):
Некоторые значения были за пределами цветовой шкалы и будут рассматриваться как NA ".
При создании приложения "статическим" (запись sp_Suicide $ 2004
вместо ввода $ year) карта отображается правильно.
Как связать входные данные ползунка таким образом, чтобы они обращались к данным для каждой страны, а не просто использовали год в качестве входных данных?
Заранее большое спасибо за любые ответы!
library(shiny)
library(leaflet)
library(data.table)
library(sp)
#read data in (data table)
Suicide<-fread("Final_Suicide_Data.csv", header=T)
#read shapefile in
world<-readOGR(dsn=".", layer="TM_WORLD_BORDERS-0.3")
#Merge Suicide data to shapefile
sp_Suicide<-sp::merge(world, Suicide, all.x=T, by.x='UN', by.y='un') #SpatialPolygonDataFrame
#make shiny application
ui <- fluidPage(
# Application title
titlePanel("Suicide"),
# Sidebar with a slider input for number of bins
sidebarLayout(
leafletOutput("suicidemap"),
sidebarPanel(
sliderInput("year",
"Year:",
min = 2004,
max = 2015,
value = 11,
sep="")
)
)
)
server <- function(input, output, session) {
output$suicidemap<-renderLeaflet({
leaflet(data=sp_Suicide)%>%
addProviderTiles("CartoDB.Positron")%>%
addPolygons(fillColor=~pal(input$year),
fillOpacity = 0.7,
color="#BDBDC3",
weight=1) %>%
addLegend("bottomleft",
pal=pal,
values=~input$year,
title="")
})
}
# Run the application
shinyApp(ui = ui, server = server)
UPDATE:
Большое спасибо за обширный ответ :)
Далее я воссоздаю пример того, как выглядят данные, которые я использую.
UN<-c(4,8,12)
Country<-c('Afghanistan', 'Albania', 'Algeria')
`2004`<-c(6.68, 7.69, 4.84)
`2005`<-c(6.68, 7.7, 4.84)
`2006`<-c(6.74, 7.15, 4.56)
`2007`<-c(6.81, 6.61, 4.27)
`2008`<-c(6.87, 6.07, 3.97)
`2009`<-c(6.93, 5.54, 3.69)
`2010`<-c(7, 5, 3.4)
`2011`<-c(7.02, 4.76, 3.34)
`2012`<-c(7.04, 4.52, 3.28)
`2013`<-c(7.06, 4.28, 3.22)
`2014`<-c(7.08, 4.04, 3.16)
`2015`<-c(7.1, 3.8, 3.1)
SuicideData<-data.frame(UN, Country, `2004`, `2005`, `2006`, `2007`, `2008`, `2009`, `2010`, `2011`, `2012`, `2013`, `2014`, `2015`)
names(SuicideData)<-c("UN", "Country", "2004", "2005", "2006", "2007", "2008", "2009", "2010", "2011", "2012", "2013", "2014", "2015")
Кроме того, это шейп-файл, который я (пытаюсь) использовать: Ссылка на шейп-файл .
Я попытался запустить ваш код, но он все равно не работает. Возможно ли, что данные, которые я использую в качестве входных данных, должны быть отформатированы по-другому? Я пытаюсь продолжить ваш интересный подход - объединить только входные данные с шейп-файлом!