2015-07-11 31 views
2

這工作得很好消失在ggvis值

library(dplyr) 
library(ggvis) 

years <- as.factor(c(2013,2013,2014,2014,2015,2015)) 
months <- c(1,2,1,2,1,2) 
values <- c(3,2,4,6,5,1) 

df <- data.frame(years,months,values) 


df %>% 
    group_by(years) %>% 
    ggvis(~months, ~values) %>% 
    layer_points(fill = ~years) 

然而,當我添加一個提示點都出現短暫但只有2015年的值保持

df <- cbind(df, id = seq_len(nrow(df))) 

all_values <- function(x) { 
    if(is.null(x)) return(NULL) 
    row <- df[df$id == x$id,] 
    paste0(names(row),": ",format(row), collapse = "<br />") 
} 

df %>% 
    group_by(years) %>% 
    ggvis(~months, ~values, key:= ~id) %>% 
    layer_points(fill = ~years) %>% 
    add_tooltip(all_values, "hover") 

也許有些簡單的錯誤,但任何幫助表示讚賞 歡呼聲

+0

我沒有看到'group_by'在這裏添加的是什麼 - 您可以通過'layer_points'中的'fill'獲得不同的組。如果您刪除了'group_by'這一行,那麼您的圖表就會以您想要的方式工作。 – aosmith

回答

1

問題在於你在ggvis之前放group_by並致電之後。只要把group_by部分ggvis調用

df %>% 
    ggvis(~months, ~values, key:= ~id) %>% 
    group_by(years) %>% 
    layer_points(fill = ~years) %>% 
    add_tooltip(all_values, "hover") 

不知道爲什麼會發生,雖然

+0

@RlnatM Tx的建議,但它對使用您的代碼時的情節沒有任何影響 – pssguy

2

目前,嘗試添加特定於當數據分組似乎不工作行中的提示後。這實際上是有道理的,因爲分組意味着您可能需要按組來分組。

你根本不需要在你的layer_points例子中進行分組,但是如果你想要點之間的特定年份以及點之間的連線,你將需要它。如果這是您想要的,您可以在添加點後將數據集分組,並將key放入layer_points而不是整個ggvis

df %>% 
    ggvis(~months, ~values) %>% 
    layer_points(fill = ~years, key:= ~id) %>% 
    add_tooltip(all_values, "hover") %>% 
    group_by(years) %>% 
    layer_lines(stroke = ~years, strokeWidth := 2) 

這並不完全理想,因爲工具提示仍然顯示爲線,即使線不具有與其關聯的唯一ID數據。要改變這一點,對你的工具提示函數進行一些小改動,以檢查id變量是否爲NULL而不是來自ggvis的整個數據集。

all_values = function(x) { 
    if(is.null(x$id)) return(NULL) 
    row <- df[df$id == x$id,] 
    paste0(names(row),": ",format(row), collapse = "<br />") 
} 

您可以在組級別添加工具提示,但你需要弄清楚你要顯示什麼樣的總結信息。在工具提示的功能中,您將使用分組變量而不是id

例如,您可以顯示與該組關聯的所有值。我設置的方式需要單擊該行以查看組信息:

group_values1 = function(x) { 
    if(is.null(x)) return(NULL) 
    group = df[df$years == unique(x$years),] 
    paste0(names(group), ": ", format(group), collapse = "<br />") 
} 

df %>% 
    ggvis(~months, ~values) %>% 
    layer_points(fill = ~years, key:= ~id) %>% 
    add_tooltip(all_values, "hover") %>% 
    group_by(years) %>% 
    layer_lines(stroke = ~years, strokeWidth := 2) %>% 
    add_tooltip(group_values1, "click") 

您可能想要顯示摘要信息。在此示例中,我將在values中顯示整體更改以及在工具提示中通過多少個月。我使用dplyr中的函數創建彙總數據集。

group_values2 = function(x) { 
    if(is.null(x)) return(NULL) 
    group = df[df$years == unique(x$years),] 
    groupval = group %>% group_by(years) %>% 
     summarise(`Change in value` = max(values) - min(values), 
          `Months Passed` = max(months) - min(months)) 
    paste0(names(groupval), ": ", format(groupval), collapse = "<br />") 
} 

df %>% 
    ggvis(~months, ~values) %>% 
    layer_points(fill = ~years, key:= ~id) %>% 
    add_tooltip(all_values, "hover") %>% 
    group_by(years) %>% 
    layer_lines(stroke = ~years, strokeWidth := 2) %>% 
    add_tooltip(group_values2, "click")