2015-02-10 2 views
3

Это довольно простой вопрос. Я читал другие темы, и обнаружили, что для того, чтобы вставить визуализацию GGVIS в Shiny, вам нужно:Интеграция ggvis с Shiny

  1. В ui.R - Call ggvisOutput("EvolucionVisitas")
  2. В server.R - использование функции bind_shiny("EvolucionVisitas")

Я m, имеющих проблемы с графикой для моей вкладки «Evolución Visitas». Я сделал оба, но я где-то сбой.

Ничего не печатает на моей вкладке: EvoluciónVisitas. Все остальное в порядке.

Вот мои данные:

structure(list(date = structure(1:31, .Label = c("2014-12-01", 
"2014-12-02", "2014-12-03", "2014-12-04", "2014-12-05", "2014-12-06", 
"2014-12-07", "2014-12-08", "2014-12-09", "2014-12-10", "2014-12-11", 
"2014-12-12", "2014-12-13", "2014-12-14", "2014-12-15", "2014-12-16", 
"2014-12-17", "2014-12-18", "2014-12-19", "2014-12-20", "2014-12-21", 
"2014-12-22", "2014-12-23", "2014-12-24", "2014-12-25", "2014-12-26", 
"2014-12-27", "2014-12-28", "2014-12-29", "2014-12-30", "2014-12-31" 
), class = "factor"), sessions = c(1932L, 1828L, 2349L, 8192L, 
3188L, 3277L, 2846L, 2541L, 5434L, 4290L, 2059L, 2080L, 2111L, 
3776L, 1989L, 1844L, 3641L, 1283L, 1362L, 1568L, 2882L, 1212L, 
957L, 851L, 928L, 1435L, 1115L, 1471L, 1128L, 1022L, 768L), id = 1:31), .Names = c("date", 
"sessions", "id"), row.names = c(NA, -31L), drop = TRUE, class = c("tbl_df", 
"tbl", "data.frame")) 

Вот мой код, спасибо.

ui.R

library(shiny) 
library(ggvis) 

# Define the overall UI 
shinyUI(

    # Use a fluid Bootstrap layout 
    fluidPage( 

    # Give the page a title 
    br(), 
    br(), 
    titlePanel("Visitas por fuente"), 

    # Generate a row with a sidebar 
    sidebarLayout(  

     # Define the sidebar with one input 



     sidebarPanel(
     dateRangeInput("dates", label = h3("Date range"), 
         start = "2014-12-01", end = "2014-12-31") 

    ), 


     mainPanel(
     tabsetPanel(
      tabPanel('Visitas por fuente', 
        plotOutput("VisitasFuente")), 
      tabPanel('Evolución de las visitas', 
        ggvisOutput("EvolucionVisitas")), 
      tabPanel('Comentarios', 
        dataTableOutput("Comentarios")) 
     ) 

    ) 
) 
)) 

server.R

library(shiny) 
library(ggvis) 



Visitas_Por_Fuente <- read.csv("D:\\RCoursera\\Star-App-2\\Visitas_Por_Fuente_Dic.csv") 
labelsF = c("Directo", "Email", "Referencias", "SEO", "Social Media", "Campañas", "Adwords") 
Visitas_Por_Fuente$date <- as.Date(Visitas_Por_Fuente$date) 
ComentariosDic <- read.csv("D:\\RCoursera\\Star-App-2\\ComentariosDic2014.csv",header = TRUE, sep = ";") 
ComentariosDic$date <- as.Date(ComentariosDic$date) 


shinyServer(


    function(input, output) { 



    output$VisitasFuente <- renderPlot({ 

     # Filter the data based on user selection month  
     date_seq <- seq(input$dates[1], input$dates[2], by = "day") 


     VisitasData <- filter(Visitas_Por_Fuente, date %in% date_seq & Fuentes %in% labelsF) 

     VisitasData <- VisitasData %>% group_by(Fuentes) %>% 
            summarise(sessions = sum(sessions)) 




     # Bar graph using ggplot2 library 
     ggplot(VisitasData, aes(factor(Fuentes), sessions, fill = Fuentes)) + 
     geom_bar(stat="identity", position = "dodge") + 
     geom_text(aes(label = comma(sessions)), position=position_dodge(width=0.9), vjust=-0.25) + 
     scale_fill_manual(breaks = c("0", "1", "3", "6", "9", "12", "15"), 
          labels = labelsF, 
          values = c("#E69F00", "#56B4E9", "#009E73", 
            "#F0E442", "#0072B2", "#A082F8", "#F072A2")) 

    }) 

    **############# Evolución de las visitas ############################################## 
    #####################################################################################** 


    output$EvolucionVisitas <- renderPlot({ 

     # Filter the data based on user selection month  
     date_seq <- seq(input$dates[1], input$dates[2], by = "day") 


     EvolucionVisitas <- filter(Visitas_Por_Fuente, date %in% date_seq) 


     mysessions <- function(x) { 
     if(is.null(x)) return(NULL) 
     #notice below the id column is how ggvis can understand which session to show 
     row <- EvolucionVisitas[EvolucionVisitas$id == x$id, ] 
     #prettyNum shows the number with thousand-comma separator 
     paste0("Sessions:", "&nbsp;",prettyNum(row$sessions, big.mark=",",scientific=F)) 
     } 




     EvolucionVisitas %>% 
     ggvis(x= ~date, y= ~sessions, key := ~id) %>% 
     layer_points() %>% 
     add_tooltip(mysessions ,"hover") %>% 
     layer_paths() %>% 
     add_axis("x", value=c(as.character(EvolucionVisitas$date[1]),as.character(EvolucionVisitas$date[round(length(EvolucionVisitas$date)/2,0)]), 
           as.character(tail(EvolucionVisitas$date, n=1)))) %>% 
     bind_shiny("EvolucionVisitas") 







    ##################################################################################### 
    ##################################################################################### 


    output$Comentarios = renderDataTable({ 

     date_seq <- seq(input$dates[1], input$dates[2], by = "day") 


     ComentariosDic <- filter(ComentariosDic, date %in% date_seq) 

     ComentariosDic <- filter(ComentariosDic, !grepl("^$", Comentarios)) 


    }) 

}) 
+0

Ваши данные не воспроизводимым, 'Fuentes' отсутствует данных. – cdeterman

ответ

1

Только устранение неполадок ggvis, ваша проблема связана прежде всего с попыткой настроить ось x. ggvis пытается быть умным, интерпретируя даты как времена. Для целей этого сюжета я считаю, что лучше всего рассматривать их как факторы.

Вот полный воспроизводимый ответ.

shiny::runGist("https://gist.github.com/cdeterman/0ac102cd68a7987a8a90") 

Вы заметите еще несколько отличий. Вероятно, лучше всего сделать ваш набор данных реактивным, чтобы вы могли повторно использовать его в нескольких местах без дополнительных накладных расходов. Кроме того, как первоначально предположил @jalapic, вы хотите сделать свой объект ggvis реактивным, чтобы сюжет мог быть динамичным и использовать приятные всплывающие подсказки.

+0

Вы можете отделить «ui.R» от «server.R», пожалуйста. Позже я попробую это у себя дома. Благодарю. –

+0

@OmarGonzales, я отделил файлы, работает ли это решение для вас? – cdeterman

+0

@cderterman, я пробовал и получил: «Прослушивание по http://127.0.0.1:4457 Ошибка в матче (x, table, nomatch = 0L): « match »требует векторных аргументов». Я не могу полностью проверить это, все попробуй позже. Большое спасибо. –

1

Где у вас есть код в server.R начиная

output$EvolucionVisitas <- renderPlot({ 

вы могли бы попробовать окружив его реактива, как это, а не в renderPlot:

vis <- reactive({ 

# Filter the data based on user selection month  
     date_seq <- seq(input$dates[1], input$dates[2], by = "day") 


     EvolucionVisitas <- filter(Visitas_Por_Fuente, date %in% date_seq) 


     mysessions <- function(x) { 
     if(is.null(x)) return(NULL) 
     #notice below the id column is how ggvis can understand which session to show 
     row <- EvolucionVisitas[EvolucionVisitas$id == x$id, ] 
     #prettyNum shows the number with thousand-comma separator 
     paste0("Sessions:", "&nbsp;",prettyNum(row$sessions, big.mark=",",scientific=F)) 
     } 

myvis <- 
    ggvis(x= ~date, y= ~sessions, key := ~id) %>% 
     layer_points() %>% 
     add_tooltip(mysessions ,"hover") %>% 
     layer_paths() %>% 
     add_axis("x", 

    value=c(as.character(EvolucionVisitas$date[1]),as.character(EvolucionVisitas$date[round(length(EvolucionVisitas$date)/2,0)]), 
            as.character(tail(EvolucionVisitas$date, n=1)))) 


    myvis 
    }) 

Тогда вне реактивного ГОВОРЯ:

vis %>% bind_shiny("EvolucionVisitas") 

Я думаю, что я помню, что-то подобное, когда я делал блестящий/ggvis - мой код на моем GitHub здесь: https://github.com/jalapic/shinyapps/tree/master/soccerteams это может помочь.

+0

Я думаю, что вам не хватает кода ggvis для фрейма данных.Я пробовал, что ты сказал, но все равно ничего не печатает. –

+0

Хорошо, я обнаружил, что часто мне нужно поставить код ggvis в реактивное выражение при использовании интерактивных всплывающих подсказок, а затем привязать блестящий к тому, что реагирует. - Возможно, ваша проблема - это что-то еще. – jalapic

+0

Я постараюсь выяснить, что это такое. В любом случае, спасибо. –

0

Хм ... это немного беспорядок. Я раздели его до части ggvis и попытался запустить его. Проверьте это в этом gist.

Вы можете запустить его с:

shiny::runGist("https://gist.github.com/corynissen/f75ecae388f81be13436") 
+0

Я пробовал это, но не реагировал на кнопки dateinputRange ... но при изменении даты изображение не меняется. Можете ли вы посмотреть на это? Благодаря! - –

+0

Ой, я подумал, что ты сможешь справиться с этим. Я обновил суть. Теперь диаграмма интерактивна с выбором даты. – cory

+0

работает отлично. Просто метки x должны показывать только первую, среднюю и последнюю даты в выбранном диапазоне, и это фактически не делает этого. Сейчас я на работе, поэтому я не могу полностью его протестировать. Я проверю это позже. Спасибо чувак. –

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