दिलचस्प पोस्ट
Python 2.6 में win32api त्रुटि आयात करें वर्तमान संदर्भ में नाम 'कॉन्फ़िगरेशन प्रबंधक' मौजूद नहीं है अनाम प्रकारों के लिए केवल गैर-पढ़ा-जायदा विकल्प Git – उपयोगकर्ता और पासवर्ड को बचाने के लिए विंडोज़ पर .netrc फ़ाइल का उपयोग कैसे करें मैं एक डीजेango टेम्प्लेट का उपयोग करके एक पेड़ संरचना (रिकर्सिव) कैसे प्रदान कर सकता हूं? सी ++ में आंकड़ों के लिए सर्वश्रेष्ठ पुस्तकालय? कैसे godaddy में php.ini फ़ाइल को एक्सेस करने के लिए होस्टिंग लिनक्स साझा किया जाता है एलएस-एल के बाद पहली पंक्ति में "कुल" क्या है? MediaButtonIntentReceiver एंड्रॉइड 4.0+ में काम नहीं कर रहा है कॉलम डेटा को पंक्तियों में विभाजित करने के लिए SQL क्वेरी Python pip स्थापित psycopg2 स्थापना त्रुटि जावास्क्रिप्ट सीएसएस चेक अगर अतिप्रवाह जीएनयू रिक्त स्थान के साथ फ़ाइल नाम को संभाल सकता है? जर्सी अनुरोध के संदर्भ में एक वस्तु इंजेक्षन कैसे करें? इनोड उपयोग कैसे करें?

क्या एक तरह से सरणी के रूप में संपूर्ण कुंजी को एक सिंगल कुंजी के रूप में रखने के बजाय अलग-अलग रिकॉर्ड के रूप में सरणी के तत्वों का इलाज करने के लिए क्रॉसफिल्टर को बताने का कोई तरीका है?

मेरे पास डेटा सेट है, जहां कुछ फ़ील्ड वैल्यू एरेज़ हैं और मैं हिस्टोग्राम को प्रदर्शित करने के लिए crossfilter और d3.js या dc.js का उपयोग करना चाहता हूं कि कितने समय डेटासेट में मौजूद प्रत्येक मान मौजूद था।

यहां एक उदाहरण है:

var data = [ {"key":"KEY-1","tags":["tag1", "tag2"]}, {"key":"KEY-2","tags":["tag2"]}, {"key":"KEY-3","tags":["tag3", "tag1"]}]; var cf = crossfilter(data); var tags = cf.dimension(function(d){ return d.tags;}); var tagsGroup = tags.group(); dc.rowChart("#chart") .renderLabel(true) .dimension(tags) .group(tagsGroup) .xAxis().ticks(3); dc.renderAll(); 

और JSFiddle http://jsfiddle.net/uhXf5/2/

जब मैं उस कोड को चलाता हूं तो यह इस तरह ग्राफ का उत्पादन करता है:

ग्राफ 1

लेकिन मैं क्या चाहता हूं, ऐसा कुछ है:

यहां छवि विवरण दर्ज करें

चीजों को और भी जटिल बनाने के लिए, क्लिक किए गए टैग द्वारा किसी भी पंक्तियों पर क्लिक करने और डेटासेट को फ़िल्टर करने में सक्षम होने के लिए यह शानदार होगा।

किसी को भी यह कैसे प्राप्त करने के लिए कोई विचार है?

धन्यवाद, कोस्त्या

Solutions Collecting From Web of "क्या एक तरह से सरणी के रूप में संपूर्ण कुंजी को एक सिंगल कुंजी के रूप में रखने के बजाय अलग-अलग रिकॉर्ड के रूप में सरणी के तत्वों का इलाज करने के लिए क्रॉसफिल्टर को बताने का कोई तरीका है?"

इसे स्वयं हल कर, यहां काम करने वाला कोड बेला है http://jsfiddle.net/uhXf5/6/

किसी भी व्यक्ति ने इसी तरह की समस्या के मामले में यह कोड दिया है:

 function reduceAdd(p, v) { v.tags.forEach (function(val, idx) { p[val] = (p[val] || 0) + 1; //increment counts }); return p; } function reduceRemove(p, v) { v.tags.forEach (function(val, idx) { p[val] = (p[val] || 0) - 1; //decrement counts }); return p; } function reduceInitial() { return {}; } var data = [ {"key":"KEY-1","tags":["tag1", "tag2"], "date":new Date("10/02/2012")}, {"key":"KEY-2","tags":["tag2"], "date": new Date("10/05/2012")}, {"key":"KEY-3","tags":["tag3", "tag1"], "date":new Date("10/08/2012")}]; var cf = crossfilter(data); var tags = cf.dimension(function(d){ return d.tags;}); var tagsGroup = tags.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value(); // hack to make dc.js charts work tagsGroup.all = function() { var newObject = []; for (var key in this) { if (this.hasOwnProperty(key) && key != "all") { newObject.push({ key: key, value: this[key] }); } } return newObject; } var dates = cf.dimension(function(d){ return d.date;}); var datesGroup = dates.group(); var chart = dc.rowChart("#chart"); chart .renderLabel(true) .dimension(tags) .group(tagsGroup) .filterHandler(function(dimension, filter){ dimension.filter(function(d) {return chart.filter() != null ? d.indexOf(chart.filter()) >= 0 : true;}); // perform filtering return filter; // return the actual filter value }) .xAxis().ticks(3); var chart2 = dc.barChart("#chart2"); chart2 .width(500) .transitionDuration(800) .margins({top: 10, right: 50, bottom: 30, left: 40}) .dimension(dates) .group(datesGroup) .elasticY(true) .elasticX(true) .round(d3.time.day.round) .x(d3.time.scale()) .xUnits(d3.time.days) .centerBar(true) .renderHorizontalGridLines(true) .brushOn(true); dc.renderAll(); 

उपरोक्त उदाहरण एक महान दृष्टिकोण है आप इसे एक कदम आगे भी ले सकते हैं। उपर्युक्त समाधान में, यह केवल आपके द्वारा बनाई गई पहली चयन के आधार पर फ़िल्टर होगा। किसी भी बाद के चयनों पर ध्यान नहीं दिया जाता है।

यदि आप चाहते हैं कि वह सभी चयनों का जवाब दे, तो आप फ़िल्टरहालर को निम्न प्रकार से बनायेंगे:

  barChart.filterHandler (function (dimension, filters) { dimension.filter(null); if (filters.length === 0) dimension.filter(null); else dimension.filterFunction(function (d) { for (var i=0; i < d.length; i++) { if (filters.indexOf(d[i]) >= 0) return true; } return false; }); return filters; } ); 

यहां कार्यशील नमूना: http://jsfiddle.net/jeffsteinmetz/cwShL/

जेफ और कोस्त्या द्वारा सूचीबद्ध दृष्टिकोण के लिए मैं कुछ संदर्भ प्रदान करने की कोशिश करना चाहता हूं

आप देखेंगे कि टैग समूह समूह का उपयोग करता है सभी विशिष्ट समूह विधि के विपरीत नहीं हैं क्रॉसफिल्टर हमें बताता है कि "लौटा दिया गया ऑब्जेक्ट मानक समूह के समान है, सिवाय इसकी कोई शीर्ष या ऑर्डर विधि नहीं है। इसके बजाय, सभी मेलिंग रिकॉर्ड्स के मूल्य को कम करने के लिए मान का उपयोग करें।" कोस्तया ने एक समूह को ".value ()" विधि कहा, जो संपूर्ण समूह का प्रतिनिधित्व करता है।

 var tagsGroup = tags.groupAll().reduce(reduceAdd, reduceRemove, reduceInitial).value(); 

यह ऑब्जेक्ट dc.js के साथ अच्छी तरह से काम नहीं करेगा क्योंकि dc.js को उम्मीद है कि ग्रुप ऑब्जेक्ट के पास सभी पद्धति हो। कोस्तया ने उस ऑब्जेक्ट को "सभी" पद्धति की तरह समझाया:

 // hack to make dc.js charts work tagsGroup.all = function() { var newObject = []; for (var key in this) { if (this.hasOwnProperty(key) && key != "all") { newObject.push({ key: key, value: this[key] }); } } return newObject; } 

यह एक साधारण dc.js चार्ट के साथ काम करेगा, लेकिन आप सभी dc.js कार्यक्षमता का उपयोग करने में सक्षम नहीं होंगे क्योंकि सभी समूह कार्य मौजूद नहीं हैं। उदाहरण के लिए, आप अपने चार्ट पर "टोपी" विधि का उपयोग करने में सक्षम नहीं होंगे क्योंकि टोपी पद्धति की उम्मीद है कि समूह ऑब्जेक्ट को "टॉप" विधि के पास रखना होगा आप शीर्ष विधि को भी इस तरह से पैच कर सकते हैं:

 topicsGroup.top = function(count) { var newObject = this.all(); newObject.sort(function(a, b){return b.value - a.value}); return newObject.slice(0, count); }; 

यह आपके चार्ट को कैप विधि का उपयोग करने में सक्षम करेगा:

 barChart .renderLabel(true) .height(200) .dimension(topicsDim) .group(topicsGroup) .cap(2) .ordering(function(d){return -d.value;}) .xAxis().ticks(3); 

एक अद्यतन उदाहरण http://jsfiddle.net/djmartin_umich/m7V89/#base पर उपलब्ध है

जेफ का उत्तर काम करता है, लेकिन "पाया" वैरिएबल का ट्रैक रखने की कोई आवश्यकता नहीं है या यदि कोई आइटम मिल गया तो पाश जारी रखें। यदि एक्स [एक्स, वाई, जेड] में है, तो इससे पहले ही 1/3 में पुनरावृत्तियों की मात्रा में कटौती हुई है

 else dimension.filterFunction(function (d) { for (var i=0; i < d.length; i++) { if (filters.indexOf(d[i]) >= 0) return true; } return false; }); 

वैकल्पिक रूप से, आप dc.js filterFunction विधि पैच कर सकते हैं और जो सभी मामलों को संभाल लेंगे।

यह अब बहुत आसान है, क्योंकि crossfilter और dc crossfilter साथ आयामों का समर्थन करते हैं। संदर्भ और उदाहरण के लिए इस प्रश्न को देखें: dc.js / crossfilter में एरे के साथ आयाम का उपयोग करना