2014-12-08 16 views
8

Ho più percorsi con più segmenti. Come si colora l'ennesimo segmento di ogni percorso con lo stesso colore?Segmenti percorso colore in ggvis/layer_paths

Ad esempio:

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) 

I percorsi risultanti sono monocromatici - Mi piacerebbe che scala dal giallo al blu.

enter image description here

Utilizzando ggplot2, questo può essere realizzato con:

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

Sembra che questo è un problema aperto - https://github.com/trifacta/vega/issues/122 – jalapic

risposta

5

Il vincolo sembra essere che tutti i segmenti in gruppi group_by i propri dati devono essere dello stesso colore . Puoi aggirarlo creando un gruppo artificiale per ogni segmento, ogni gruppo collega solo due punti. Ciò significa che devi raddoppiare ogni riga dei dati a parte le prime e le ultime righe di ogni tuo gruppo originale. Ho illustrato questo a mano scegliendo le righe con i tuoi dati; ci sarebbe un modo per farlo più programmaticamente, ma se ciò vale la pena dipende dal tuo caso d'uso reale.

È un po 'un problema, ma sicuramente una sorta di soluzione.

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

C'è un modo per raggiungere questo obiettivo senza raggruppamento dal raggruppamento è computazionalmente costoso se hai a che fare con tavoli grandi e vuoi rendere dinamici i tuoi grafici. –

+0

Sono abbastanza sicuro di "no". Ma ci potrebbero essere altri modi per fare ciò che vuoi in modo efficiente. –

Problemi correlati