2014-12-08 17 views
8

Birden fazla segment içeren birden çok yolum var. Her yolun Nth segmenti aynı renkle nasıl renklendirilir?ggvis/layer_paths öğesindeki renk yolu bölümleri

Örneğin

:

require(dplyr) 
require(ggvis) 
df <- data.frame(x = runif(10,0,10), y = runif(10,0,10), 
       group=c(rep(5,5),rep(10,5)), colorIdx=rep(c(1:5), 2)) 
df$group = factor(df$group) 

color_fun = colorRampPalette(c("yellow","blue"),5) 

myColors = color_fun(5) 

df$color = myColors[df$colorIdx] 

df %>% group_by(group) %>% 
    ggvis(~x, ~y, strokeWidth:=~group) %>% layer_paths(stroke :=~color) 

çıkan yolları tek renkli olan - Onları mavi sarıdan ölçeğe istiyorum.

require(ggplot2) 
ggplot(df, aes(x=x, y=y, group=group, colour=colorIdx, size=group)) + geom_path() + 
    scale_colour_gradient("", low="#FED863", high="#2A6EBB", limits=c(1,4)) 

enter image description here

+2

görünüyor - https://github.com/trifacta/vega/issues/122 – jalapic

cevap

5

kısıt verinin group_by gruplarındaki tüm segmentler aynı renk olması gerektiğini gibi görünüyor: ggplot2 kullanma

enter image description here

, bununla gerçekleştirilebilir . Her bir segment için yapay bir grup oluşturarak, her grup sadece iki noktaya bağlayarak etrafından dolaşabilirsiniz. Bu, orijinal gruplarınızın her birinin ilk ve son satırlarından ayrı olarak verilerinizdeki her satırı ikiye katlamak zorunda olduğunuz anlamına gelir. Verileri ile satırları seçerek el ile bunu gösterdim; Bunu daha programlı bir şekilde yapmanın bir yolu olacaktı, fakat bunun faydalı olup olmadığı gerçek kullanım durumunuza bağlıdır.

Biraz rahatsız edici ama kesinlikle bir çeşit geçici çözüm. Bu açık bir konudur gibi

df2 <- df[c(1,2,2,3,3,4,4,5, 6,7,7,8,8,9,9,10), ] 
df2$group2 <- c(rep(letters[1:4], each=2), rep(letters[6:9], each=2)) 

df2 %>% group_by(group2) %>% 
    ggvis(~x, ~y, strokeWidth:=~group) %>% 
    layer_paths(stroke :=~color) 

enter image description here

+0

gruplaşma beri gruplama olmadan bunu başarmak için bir yol var hesaplama pahalı olduğunu mı Büyük masalarla uğraşıyorsanız ve arazilerinizi dinamik hale getirmek istiyorsanız. –

+0

Eminim "hayır". Ancak, istediğinizi yapmak için başka yollar da olabilir. –