2014-12-08 12 views
8

Ich habe mehrere Pfade mit mehreren Segmenten. Wie färbt man das Nte Segment jedes Pfades mit der gleichen Farbe?Farbpfadsegmente in ggvis/layer_paths

Zum Beispiel:

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) 

Die resultierenden Pfade sind monochromatisch - ich sie von gelb zu blau skalieren möchten.

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

Es sieht aus wie dies eine offene Frage ist - https://github.com/trifacta/vega/issues/122 – jalapic

Antwort

5

Die Einschränkung scheint zu sein, dass alle Segmente die gleiche Farbe sein, in den group_by Gruppen Daten benötigen:

enter image description here

Mit ggplot2, kann dies mit durchgeführt werden . Sie können es umgehen, indem Sie für jedes Segment eine künstliche Gruppe erstellen, wobei jede Gruppe nur zwei Punkte verbindet. Das bedeutet, dass Sie jede Zeile in Ihren Daten verdoppeln müssen, abgesehen von der ersten und letzten Zeile jeder Ihrer ursprünglichen Gruppen. Ich habe dies von Hand illustriert und die Zeilen mit Ihren Daten ausgewählt. es gibt eine Möglichkeit, es programmgesteuert zu machen, aber ob sich dies lohnt, hängt von Ihrem tatsächlichen Anwendungsfall ab.

Es ist ein bisschen lästig, aber sicherlich eine Art Workaround.

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

Gibt es eine Möglichkeit, dies da die Gruppierung ohne Gruppierung zu erreichen, ist rechnerisch teuer wenn Sie mit großen Tischen zu tun haben und Ihre Plots dynamisch machen wollen. –

+0

Ich bin mir ziemlich sicher "nein". Aber es könnte andere Wege geben, effizient zu tun, was Sie wollen. –