широкий формат данных в качестве входных данных для приложения Shiny MapView - нужны реактивные оболочки? - PullRequest
1 голос
/ 26 июня 2019

У меня проблемы с использованием столбцов из данных, полученных в широком формате, в качестве динамических входов в приложение Shiny Map.

В приложении я надеюсь, что смогу:

  • выберите параметр точечных данных (данные примера ниже: 16 местоположений, 6 параметров) в раскрывающемся меню типов и отрегулируйте размер символа, чтобы представить абсолютные значения выбранного параметра с помощью ползунка (чтобы помочь визуализировать положительные и отрицательные отличия от нуля)
  • с любым выбранным параметром, сохраняйте возможность видеть все параметры (столбцы) во всплывающей функции mapview (mapview превращает столбцы в строки для всплывающего окна).Кажется, что в отфильтрованном длинном формате data.frame будут отсутствовать данные с точки зрения всплывающего окна / просмотра
  • сохранит (не абсолютное) исходное значение на метке при наведении курсора (например, -7.3 на изображении)

Помимо этих функций, я не знаю, нужно ли / где устанавливать реактивную оболочку (и)?Или, может быть, я мог бы сделать все проще с другой библиотекой, ориентированной на карту (хотя mapview отлично подходит для многих вещей)?

Мои попытки прокомментированы ниже - пользовательский интерфейс работает, как и предполагалось, за исключением выбора без выпадающего списка - приложение ограничено только одним рабочим выпадающим параметром с mapview(df["param1"] и cex = param1 * input$cex.

Вотвоспроизводимая app.r:

library(tidyverse)
library(sf)
library(shiny)
library(shinydashboard)
library(leaflet)
library(mapview)

## sample earthquake data ##
set.seed(6)
lat <- rnorm(16,-34, 9)
lon <- rnorm(16,-67,.3)
param1 <- rnorm(16, 10, 40)   %>% round(1)
param2 <- rnorm(16, 25, 3)    %>% round(1)
param3 <- rnorm(16, -18, 10)  %>% round(1)
param4 <- rnorm(16, -200, 93) %>% round(1)
param5 <- rnorm(16, 0.1, .09) %>% round(1)
param6 <- rnorm(16, 417, 33)  %>% round(1)
df <- data.frame(lat, lon, param1, param2, param3, param4, param5, 
param6) 
df <- st_as_sf(df, coords = c("lon", "lat"), crs = 4326) 
paramchoices <- colnames(df) %>% .[.!="geometry"]
colorpal = mapviewPalette("mapviewSpectralColors") 

ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(  
sliderInput("cex", "Symbol Size",
            min = 0.000001, max = 10, value = 1, step = 0.000001
),
selectizeInput(

  "parameter", "Earthquake Parameter", choices = paramchoices, 
  selected = c("param1"), 
  multiple = FALSE)
),
dashboardBody(
tags$style(type = "text/css", "#mapplot {height: calc(100vh - 80px) !important;}"),
leafletOutput("mapplot")
)
)

server <- function(input, output) {

# df <- reactive ({
#   df %>% mutate(selectedparameter = input$parameter,
#                 selectedparameter_abs = abs(selectedparameter))
# })

output$mapplot <- renderLeaflet({
               m <-   mapview(df["param1"], #mouseover column
               #m <- mapview(df["selectedparameter"],
               cex = param1 * input$cex,  #marker size column
               #cex = df$selectedparameter_abs * input$cex, 
               col.regions = colorpal(100), 
               alpha.regions = 0.3,
               legend = TRUE,
               popup = popupTable(df),
               layer.name =  "selectedparam[unit]") 
 m@map     
}
)}
shinyApp(ui, server)

enter image description here

дополнительная информация, относящаяся к части абсолютного значения - Цвет точки и размер символа на основе различныхпеременные в просмотре карты

спасибо.

...