2014-07-01 15 views
11

Bu benim giriş veri kümesi ise: benim ggvis, ben aşağıdaki değişkenleri firstaired.posix ve rating kullanıyorum İçingiriş veri kümesi içinde bulunan ediyor ggvis ipucu veri ekleme ancak doğrudan vis

> names(breakingbad.episodes) 
[1] "season"   "episode"   "epnum"   "epid"    "title"   
[6] "url.trakt"  "firstaired.utc" "id.tvdb"   "rating"   "votes"   
[11] "loved"   "hated"   "overview"   "firstaired.posix" "year"    
[16] "zrating.season" "src"  

:

> str(breakingbad.episodes[c("firstaired.posix", "rating")]) 
'data.frame': 62 obs. of 2 variables: 
$ firstaired.posix: POSIXct, format: "2008-01-21 02:00:00" "2008-01-28 02:00:00" "2008-02- 11 02:00:00" ... 
$ rating   : num 87 85 84 84 83 90 87 85 88 83 ... 

Ben başarıyla oluşturuldu benim ggvis böyle rating bilgileri içeren bir araç ipucu ile:

> breakingbad.episodes %>% 
ggvis(x = ~firstaired.posix, 
    y = ~rating, 
    fill = ~season) %>% 
layer_points() %>% 
add_axis("x", title = "Airdate") %>% 
add_axis("y", title = "Rating") %>% 
add_legend("fill", title = "Season") %>% 
add_tooltip(function(data){paste0("Rating: ", data$rating)}, "hover") 

Ama aslında epid değişken gibi, daha fazla veri içermesini ipucu istiyorum, bu yüzden denedim: epid sıralı faktördür as.character() çünkü

… 
add_tooltip(function(data){paste0("Rating: ", data$rating, "\n", "Epid: ", as.character(data$epid))}, "hover") 

... kullanma - Ama ipucu parçası boştur. (Ayrıca, eklemek için \n amaçlayan linebreak fark ettim, ama bu farklı bir sorun). Bu sorunun nedeni benziyor

I str() çıkışında bakarak toplanan neden görüntülemek istediğiniz bilgi içermez ggvis içine benim veri kümesi boru yarattığı vis nesne, en azından olmasıdır ilk örnek.

DÜZENLEME: Linebreak sorununu çözdüm, bu yüzden beni ?add_tooltip'a yönlendirmeye gerek yok - bunu tamamen unutmuş.

DÜZENLEME: Kabul edilen yanıt gayet iyi çalışıyor, araç ipucunda rasgele değişkenler koymama izin vermese de, hemen her şeye rağmen ihtiyacım olan şey, teşekkürler! İşte sonunda did:

breakingbad.episodes <- transform(breakingbad.episodes, id = paste0(epid, " - ", title)) 

breakingbad.episodes %>% 
    ggvis(x = ~firstaired.posix, 
     y = ~rating, 
     fill = ~season, 
     key := ~id) %>% 
    layer_points() %>% 
    add_axis("x", title = "Airdate") %>% 
    add_axis("y", title = "Rating") %>% 
    add_legend("fill", title = "Season") %>% 
    add_tooltip(all_values, "click") 
+0

mı? –

+0

Çalışmıyor, çünkü 'add_tooltip' ilk argümanı olarak bir 'vis' alır ve bu görsel "ggvis()" tarafından oluşturulur. – Jemus42

+0

bunu anladın mı? Anahtar benzersiz olmalı. –

cevap

20

Evet, mümkün. Normalde, istemci yalnızca gerçekte arsada bulunan veri sütunlarını geri gönderir. diğer sütunları almak için, orijinal verilere içine endeksi bir anahtar kullanmalısınız: Bu `ggvis` önce` add_tooltip` koyarsanız ne olur basit tekrarlanabilir örnek

library(ggvis) 
mtc <- mtcars 
mtc$id <- 1:nrow(mtc) 

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

mtc %>% ggvis(x = ~wt, y = ~mpg, key := ~id) %>% 
    layer_points() %>% 
    add_tooltip(all_values, "hover") 
+0

Teşekkürler! Cevabınızı kabul edildi olarak seçtim çünkü önceki cevapla aynı çözümü kapsamakta, aynı zamanda basit ve tekrarlanabilir bir örnek sunmaktadır. – Jemus42

+0

Bu harika. Araç ipucu bir clunky serif yazı tipinde olmazsa daha iyi olurdu. – Henk

+3

Bu yaklaşımın, arsa türüne bağlı olarak bilinen herhangi bir dezavantajı var mı? Layer_lines() katman ve layer_points() katmanım olduğu bir örneğim var.Ggvis'e "key: = ~ id" girdisini eklediğimde, layer_lines() 'ın arsadan kaybolmasını garip bir şekilde yapar. Bu biraz karmaşık bir örnektir, bu yüzden henüz tekrar edilebilir bir kod parçam yok, ancak bilinen herhangi bir sorun olup olmadığını ilk önce ben sordum. – dsh

2

Bir geçici çözüm normalde gözlemler geçişleri sırasında birbirlerine karşılık aldığını izlemek anlamına gelir key mülkte epid değişkeni geçmektir ama istenen etti Eğer her satır için benzersiz bir değerle bir id sütun ekleyin ve sonra bunu yapabilirsiniz orijinal veri kümesinden birden değişkeni kullanmak gerekirse

breakingbad.episodes <- data.frame(firstaired.posix = as.POSIXct(c("2008-01-21 02:00:00", "2008-01-28 02:00:00")), 
rating = c(87, 85), epid = as.factor(c(12,23)), season = as.factor(c(1,2)), somevar = c("special", "very_special")) 

breakingbad.episodes %>% 
    ggvis(x = ~firstaired.posix, 
     y = ~rating, 
     fill = ~season, key := ~epid) %>% 
    layer_points() %>% 
    add_axis("x", title = "Airdate") %>% 
    add_axis("y", title = "Rating") %>% 
    add_legend("fill", title = "Season") %>% 
    add_tooltip(function(data){paste0("Rating: ", data$rating, "\n", "Epid: ", as.character(data$epid))}, "hover") 

: herhangi bir yan etkisi üretmeden burada verilerde epid dahil etkisi:

breakingbad.episodes <- data.frame(id = c(1,2), firstaired.posix = as.POSIXct(c("2008-01-21 02:00:00", "2008-01-28 02:00:00")), 
rating = c(87, 85), epid = as.factor(c(12,23)), season = as.factor(c(1,2)), somevar = c("special", "very_special")) 

breakingbad.episodes %>% 
    ggvis(x = ~firstaired.posix, 
     y = ~rating, 
     fill = ~season, key := ~id) %>% 
    layer_points() %>% 
    add_axis("x", title = "Airdate") %>% 
    add_axis("y", title = "Rating") %>% 
    add_legend("fill", title = "Season") %>% 
    add_tooltip(function(data){paste0("Rating: ", data$rating, "\n", "Epid: ", 
as.character(breakingbad.episodes$epid[breakingbad.episodes$id == data$id]), "\n", 
"What this is: ", breakingbad.episodes$somevar[breakingbad.episodes$id == data$id])}, "hover")