2011-11-22 10 views
39

मैं हालिया Google Analytics "विज़िटर फ़्लो" द्वारा प्रस्तुत किए गए आरेख को उत्पन्न करने की कोशिश कर रहा हूं। इन्हें Alluvial diagrams भी कहा जाता है।Google Analytics के विज़िटर फ़्लो जैसे ग्राफ/आरेख को कैसे उत्पन्न करें?

मैं एक वेब या गैर-वेब आधारित समाधान का उपयोग कर सकता हूं, जब तक कि मैं इसे स्वयं चला सकूं।

  • समय t1 पर, मैं x1 इकाइयों,
  • समय t2 पर n1 भागों में बांटा गया है, n1 भागों n2 में विभाजित (या मर्ज किए गए):

    डेटा मैं कल्पना करने के लिए चाहते हैं निम्नलिखित है x2 इकाइयों के साथ भागों,

    • मैं दिखाने के लिए जहां विभाजन/मर्ज के होने जा रहे हैं चाहता हूँ।

मेरे डेटा वर्तमान में NetworkX में एक संयुक्ताक्षर के साथ प्रस्तुत किया जाता है, लेकिन जब से मैं उत्पादन कर सकते हैं किसी भी प्रारूप में अपने डेटा की आवश्यकता इस अप्रासंगिक हो सकता है।

Similar to the diagram below

उत्तर

58

मुझे लगा कि यह एक दिलचस्प सवाल था, इसलिए मैं d3 का उपयोग कर एक उदाहरण जलोढ़ चित्र बनाया: http://nickrabinowitz.com/projects/d3/alluvial/alluvial.html

और, क्योंकि d3 एनीमेशन पर इतना अच्छा है, और मैंने सोचा कि यह अच्छा लगेगा, मैंने एक एनिमेटेड संस्करण भी बनाया: http://nickrabinowitz.com/projects/d3/alluvial/alluvial-dynamic.html

इसमें जो कुछ भी आप चाहते हैं उसे कवर नहीं करता है, लेकिन उम्मीद है कि यह कुछ आधार प्रदान करेगा। शुरुआत में कोड का बड़ा ब्लॉक सिर्फ नकली डेटा बना रहा है - आप इसे अपने वास्तविक डेटा से बदल सकते हैं, या इसे d3.json का उपयोग करके लोड कर सकते हैं। उम्मीद प्रारूप डोम नोड संरचना d3 के समान है नेटवर्क रेखांकन के लिए उम्मीद:

{ 
    // list of time slots t1 through tn 
    times: [ 
     // list of t1 nodes 
     [ 
      { 
       nodeName: "Node 1", 
       id: 1, 
       nodeValue: 24332 
      }, 
      // etc ... 
     ], 
     // etc ... 
    ], 
    // list of all links 
    links: [ 
     { 
      source: 1, // id of source node 
      target: 5, // id of target node 
      value: 3243 
     }, 
     // ... etc 
    ] 
} 

मुझे आशा है कि उपयोगी है - यह बहुत प्रतिक्रिया एक ठेठ नहीं है, और यह करने के लिए अनुकूलित करने के लिए काम की एक निश्चित राशि की आवश्यकता होती है की संभावना हैं आपकी ज़रूरतें, लेकिन मैंने सोचा कि यह उपयोगी हो सकता है।

+0

यह बहुत अच्छा है! मैं इसे अभी आज़मा दूंगा। – pocketfullofcheese

+2

एक और उदाहरण, d3.js का उपयोग करके http://www.theage.com.au/national/parsets – pocketfullofcheese

+0

कि अंतिम लिंक एक चिकना एकीकरण था श्री पनीर –

-1

पर विचार समानांतर निर्देशांक आर

में साजिश! [समानांतर एक हॉर्स रेस का प्लॉट समन्वय] [1]

df <- structure(list(Horse = structure(c(11L, 16L, 13L, 15L, 3L, 18L, 10L, 17L, 19L, 8L, 5L, 9L, 1L, 4L, 12L, 2L, 14L, 7L, 6L), 
.Label = c("Advice", "Atomic Rain", "Chocolate Candy", "Desert Party", "Dunkirk", "Flying Private" 
, "Friesan Fire", "General Quarters", "Hold Me Back", "Join in the Dance", "Mine That Bird", "Mr. Hot Stuff", "Musket Man" 
, "Nowhere to Hide", "Papa Clem", "Pioneer of the Nile", "Regal Ransom", "Summer Bird", "West Side Bernie") 
, class = "factor") 
, X1.4 = c(19L, 3L, 8L, 5L, 17L, 16L, 1L, 2L, 13L, 12L, 9L, 14L, 15L, 4L, 18L, 10L, 11L, 6L, 7L) 
, X1.2 = c(19L, 3L, 8L, 4L, 12L, 16L, 1L, 2L, 17L, 13L, 10L, 5L, 15L, 6L, 18L, 9L, 14L, 7L, 11L) 
, X3.4 = c(19L, 4L, 7L, 3L, 15L, 16L, 1L, 2L, 14L, 11L, 9L, 6L, 17L, 5L, 18L, 10L, 12L, 8L, 13L) 
, X1m = c(12L, 2L, 7L, 4L, 8L, 15L, 1L, 3L, 17L, 10L, 11L, 5L, 13L, 6L, 16L, 9L, 18L, 14L, 19L) 
, Str = c(1L, 2L, 4L, 3L, 7L, 9L, 5L, 6L, 13L, 10L, 12L, 8L, 14L, 11L, 16L, 15L, 18L, 17L, 19L) 
, Finish = 1:19), .Names = c("Horse", "X1.4", "X1.2", "X3.4", "X1m", "Str", "Finish") 
, class = "data.frame", row.names = c(NA, -19L)) 

library(ggplot2) 

df$Horse <- with(df, reorder(Horse, Finish)) 
dfm <- melt(df) 

#add a volume metric 
dfm$volume <- ifelse(dfm$variable == "X1.4" & dfm$value <= 6,6, 
       ifelse(dfm$variable == "X1.4" & dfm$value > 6 & dfm$value <= 12,6, 
      ifelse(dfm$variable == "X1.4" & dfm$value > 12,7,1))) 
dfm$volume <- ifelse(dfm$variable == "X1.2" & dfm$value <= 9,9, 
       ifelse(dfm$variable == "X1.2" & dfm$value > 9 & dfm$value<= 14,5, 
      ifelse(dfm$variable == "X1.2" & dfm$value > 14,5,dfm$volume))) 
dfm$volume <- ifelse(dfm$variable == "X3.4" & dfm$value <= 3,3, 
        ifelse(dfm$variable == "X3.4" & dfm$value > 3 & dfm$value <= 19,1,dfm$volume)) 

#Alter the race for some neck to neck action 
dfm$value <- ifelse(dfm$variable == "X1.4" & dfm$value <= 6,4, 
       ifelse(dfm$variable == "X1.4" & dfm$value > 6 & dfm$value <= 12,8,dfm$value)) 
dfm$value <- ifelse(dfm$variable == "X1.2" & dfm$value <= 9,5, 
       ifelse(dfm$variable == "X1.2" & dfm$value > 9 & dfm$value <= 14,11,dfm$value)) 
dfm$value <- ifelse(dfm$variable == "X3.4" & dfm$value <= 3,2, 
       ifelse(dfm$variable == "X3.4" & dfm$value > 3 & dfm$value <= 19,11,dfm$value)) 


p <- ggplot(dfm, aes(factor(variable), value, group = Horse, colour = Horse, label = Horse)) 
p1 <- p + geom_line(aes(size = volume), labels = labels) + geom_text(data = subset(dfm,variable == "Finish"), 
aes(x = factor(variable + 0.5)), size = 3.5, hjust = 0.8) 

labels <- c(expression(1/4), expression(1/2),expression(3/4), "1m", "Str", "Finish","") 

p1 + theme_bw() + opts(legend.position = "none", 
    panel.border = theme_blank(), axis.ticks = theme_blank()) + 
    scale_x_discrete(breaks = c(levels(dfm$variable), 
     ""), labels = labels) + scale_y_continuous(breaks = NA, 
    trans = "reverse") + xlab(NULL) + ylab(NULL) 


# Credit and other notes: 
# http://learnr.wordpress.com/2009/05/06/ggplot2-bump-chart/ 
# ![enter image description here][1]http://had.co.nz/ggplot/plot-templates.html Parallel coordinates plot 
+0

बहिष्कृत कार्यों (opts, theme_blank ..) और इस उदाहरण में अन्य त्रुटियां। – geotheory

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