2015-02-10 73 views
3

這是一個相當簡單的問題。我看了其他線程,結果發現,爲了插入GGVIS可視化到閃亮,你需要:ggvis與Shiny集成

  1. ui.R - 呼叫ggvisOutput("EvolucionVisitas")
  2. server.R - 使用功能bind_shiny("EvolucionVisitas")

我m有問題爲我的標籤「EvoluciónVisitas」繪製圖表。 我做了兩個,但我失敗了。

我的選項卡中沒有打印: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 2015-02-12 13:55:03

回答

1

只有對ggvis進行故障排除,您的問題主要是您嘗試自定義x軸的結果。 ggvis通過將日期解釋爲時間來嘗試變得聰明。出於這個陰謀的目的,我認爲最好把它們當作因素。

這是一個完全可重複的答案。

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

您會注意到其他一些差異。可能最好使數據集處於活動狀態,以便您可以在多個地方重複使用它,而無需額外的開銷。另外,由於@ jalapic最初建議,你想讓你的ggvis對象反應,所以劇情可以是動態的,並使用漂亮的工具提示。

+0

請您將「ui.R」從「server.R」分開。稍後我會在家裏嘗試。謝謝。 – 2015-02-12 18:18:48

+0

@OmarGonzales,我把文件分開了,這個解決方案對你有用嗎? – cdeterman 2015-02-12 21:29:58

+0

@cderterman,我試過並得到:「聽http://127.0.0.1:4457 匹配錯誤(x,table,nomatch = 0L): '匹配'需要向量參數」。我無法完全測試它,所有測試都在稍後嘗試。非常感謝。 – 2015-02-12 21:35:43

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代碼應用於數據框。我試過你說了什麼,但是仍然沒有打印。 – 2015-02-10 03:21:34

+0

嗯,我發現我經常需要將我的ggvis代碼放入反應式表達式中,然後使用交互式工具提示,然後綁定閃爍的反應。 - 也許你的問題是別的 – jalapic 2015-02-10 03:30:36

+0

我會試着找出它是什麼。無論如何,男士。 – 2015-02-10 03:32:23

0

呃......這有點亂。我把它剝離到ggvis部分,並試圖讓它運行。看看這個gist

你可以運行它:

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

我試過這個,但是沒有與dateinputRange按鈕反應......但是當改變日期時圖形不會改變。你可以看看嗎?謝謝! - – 2015-02-12 21:22:26

+0

哦,我想你可以得到那個跑步。我已經更新了要點。該圖表現在與日期選擇器交互。 – cory 2015-02-12 21:30:59

+0

它工作完美。只需要x標籤,只需要顯示所選範圍內的第一個,中間和最後一個日期,而它實際上並未這樣做。我現在在工作,所以我不能完全測試它。我稍後會仔細檢查它。謝啦。 – 2015-02-12 21:39:10