2014-12-08 8 views
8

मेरे पास एकाधिक सेगमेंट के साथ कई पथ हैं। एक ही रंग के साथ प्रत्येक पथ के एनएच सेगमेंट को कैसे रंगता है?ggvis/layer_paths में रंग पथ खंड

उदाहरण के लिए:

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) 

जिसके परिणामस्वरूप पथ एक रंग हैं - मैं उन्हें नीले रंग के लिए पीले रंग से पैमाने पर करने के लिए करना चाहते हैं।

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

ऐसा लगता है कि यह एक खुला मुद्दा है - https://github.com/trifacta/vega/issues/122 – jalapic

उत्तर

5

बाधा होने के लिए कि डेटा के group_by समूहों के सभी क्षेत्रों में एक ही रंग होने की जरूरत है लगता है:

enter image description here

ggplot2 का उपयोग करना, इस के साथ पूरा किया जा सकता । आप प्रत्येक सेगमेंट के लिए कृत्रिम समूह बनाकर इसके चारों ओर मिल सकते हैं, प्रत्येक समूह केवल दो बिंदुओं को जोड़ता है। इसका मतलब है कि आपको अपने प्रत्येक मूल समूह की पहली और अंतिम पंक्तियों के अलावा अपने डेटा में प्रत्येक पंक्ति को दोगुना करना होगा। मैंने इसे अपने डेटा के साथ पंक्तियों को चुनकर हाथ से सचित्र किया है; इसे अधिक प्रोग्रामेटिक तरीके से करने का एक तरीका होगा, लेकिन क्या यह सार्थक है आपके वास्तविक उपयोग मामले पर निर्भर करता है।

यह थोड़ा परेशान है लेकिन निश्चित रूप से एक प्रकार का कामकाज है।

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

वहाँ समूहीकरण के बाद से समूहीकरण के बिना इस लक्ष्य को हासिल करने के लिए एक तरह से computationally महंगा है है यदि आप बड़ी टेबल से निपट रहे हैं और अपने प्लॉट गतिशील बनाना चाहते हैं। –

+0

मुझे यकीन है कि "नहीं"। लेकिन आप जो कुशलतापूर्वक चाहते हैं उसे करने के अन्य तरीके हो सकते हैं। –

संबंधित मुद्दे