2014-11-14 2 views
2

Я пытаюсь наложить всплывающие подсказки на карту США, но везде, где я наводил ... отображает те же данные. Кроме того, данные неверны. Я думаю, что он проходит через значения факторов, а не значение символа. Я попытался взять подсказки из примера фильма-исследователя - http://shiny.rstudio.com/gallery/movie-explorer.html - но, он не работает, как я надеялся. Любые подсказки или подсказки, на которые я должен обратить внимание?ggvis Map & Tooltips

Обновление: Я решил, что вы можете передавать только аргументы, вызываемые в функцию ggvis. Итак, если моя функция подсказки включала region, long, & lat, все они появлялись в подсказке. Поскольку Population и Income не отображаются нигде в функции, они не передают их. Я все еще теряюсь в том, как действовать, но любые идеи были бы потрясающими! :)

library(ggplot2) 
library(shiny) 
library(ggvis) 
library(dplyr) 

shinyApp(

    ui = fluidPage(
    #numericInput("n", "n", 1), 
    ggvisOutput("map") 
), 

    server = function(input, output) { 

    statesData <- reactive({ 

     states <- data.frame(state.x77) 
     states$region <- row.names(state.x77) %>% tolower 
     row.names(states) <- NULL 

     all_states <- map_data("state") %>% 
     mutate(region = tolower(region)) %>% 
     left_join(states) 

     all_states_unique <- all_states %>% 
     select(region, Population, Income, Illiteracy, Life.Exp, Murder, HS.Grad, Frost, Area) %>% 
     unique 

     states_tooltip <- function(x) { 
     if (is.null(x)) return(NULL) 
     if (is.null(x$region)) return(NULL) 

     # Pick out the movie with this ID 
     allStates <- isolate(all_states_unique) 
     state <- allStates[allStates$region == x$region, ] 

     paste0("<b>", state$region, "</b><br>", 
       state$Population, "<br>", 
       state$Income 

     ) 
     } 

     all_states %>% 
     arrange(group, order) %>% 
     ggvis(x = ~long, y = ~lat) %>% 
     layer_paths(fill = ~region, stroke := .2) %>% 
     add_tooltip(states_tooltip, "hover") 

    }) 

    statesData %>% bind_shiny('map')  

    } 

) 
+0

Может быть связано с [этой проблемы] (http://stackoverflow.com/questions/24493278/ggvis-density-plot-with-tooltip/24498139# 24498139) – Jaap

ответ

2

Добавить индекс в dataframe вы хотите вывести данные подсказки из:

state$id <- 1:nrow(state) 

ggvis принимает "ключ" аргумент для облегчения такого рода подсказки:

ggvis(x = ~long, y = ~lat, key := ~id) %>% 

Я попытался выяснить этот пример фильма и не нашел его очень полезным. Это всегда работает для меня:

add_tooltip(function(x) { 
      row <- state[state$id == x$key,] 
      paste0("<b>", row[,"region"], "</b><br>", 
        row[,"Population"], "<br>", 
        row[,"Income"] 
        )}) 

Что касается вопроса ж/подсказке всегда придумывают то же самое, я не знаю точно, но думаю, что это связано с порядком ваших слоев в команде ggvis. Имел аналогичную проблему, когда у меня было несколько полигонов, наложенных поверх диаграммы рассеяния. Он продолжал пытаться нарисовать всплывающую подсказку для полигонов (которые охватывали всю диаграмму), когда я хотел, чтобы отдельные точки отображали всплывающую подсказку. Отменяя их порядок в команде ggvis (т.е. layer_points()%>% layer_shapes()), я заставил его работать.

+0

Эй, Кирпич, спасибо за ответ! Это не совсем решает, что мне нужно, но это определенно дает небольшое руководство. – maloneypatr

+0

Эй, Кирпич, наконец, получил его, чтобы поработать с каким-то другим мастером. Благодаря! – maloneypatr

+0

Отлично! С удовольствием! –

2

Я понимаю, что это довольно поздно, но для будущих ссылок и других, которые наткнулись на эту страницу. Если ваш фреймворк был преобразован с использованием fortify и имеет групповую переменную, то это может быть эквивалентно уровню состояния. Затем группа может использоваться для фильтрации всплывающей подсказки, как в команде ggvis. Это позволило мне получить доступ к другим переменным, которые я хотел.

В моей проблеме я не мог использовать ключевое решение, потому что создавал сюжет, чтобы реагировать на многочисленные годы. Таким образом, чтобы изменить то, что у вас есть выше states_tooltip бы стать:

 states_tooltip <- function(x){ 
row <- allstates[allstates$group==x$group,] %>% 
    select(region, Population, Income) %>% unique 
paste0("<b>", row[,"region"], "</b><br>", 
       row[,"Population"], "<br>", 
       row[,"Income"] 
       )})