2012-11-02 12 views
6

मुझे वास्तव में this graph पसंद है और इसकी कार्यक्षमता और यह मेरी इच्छित चीज़ों के लिए बिल्कुल सही है। केवल एक चीज जिसे मुझे बदलने की जरूरत है, मुझे वाई-अक्ष पर सामान्य डेटा की अनुमति देने की आवश्यकता है और मुझे लगता है कि यह काम करने के लिए प्रतीत नहीं होता है (मैं एक नौसिखिया हूं)।औपचारिक डेटा पर ब्रशिंग

जब मैं क्रमसूचक के लिए रैखिक से y पैमाने बदल:

yscale[k] = d3.scale.linear() .domain(d3.extent(data, function(d) { return +d[k]; })) .range([h, 0]));

को
yscale[k] = d3.scale.ordinal().rangePoints([h, 0]), 
     yscale[k].domain(data.map(function(d) { return d[k]; }))) 

Brushing अभी भी पता चलता है और अपने आप में काम करता है लेकिन यह चयनित लाइनों छोड़ने फ़िल्टर नहीं करती। कोई लाइन तब तक दिखाई नहीं देती जब तक कि मैं इसे अक्ष के शीर्ष पर नहीं ले जाता, तब सभी या अधिकतर सभी दिखाए जाते हैं। जब मैंने फायरबग के साथ कोड के माध्यम से कदम रखा तो ऐसा लगता था कि ब्रश क्षेत्र में बस लाइनें नहीं मिल रही थीं लेकिन सभी (?) ... और मुझे पता लगाना प्रतीत नहीं होता है। :(

अगर कोई (विशेष रूप से सभी स्थानों मैं बदल सकते हैं और कैसे करना है) इस के साथ बाहर मदद कर सकता है, मैं इस काम के हो जाते हैं और जानने मैं गलत क्या कर रहा हूँ करने के लिए प्यार होता है: - \

उत्तर

5

एक क्रमसूचक ब्रश जबकि एक मात्रात्मक अक्ष brushing डोमेन रिटर्न अक्ष पिक्सल देता है,।

https://github.com/mbostock/d3/wiki/SVG-Controls#wiki-brush_x

पैमाने आम तौर पर एक मात्रात्मक पैमाने के रूप में परिभाषित किया गया है, जो मामले में हदसे डेटा अंतरिक्ष में हैस्केल का डोमेन; हालांकि, इसे इसके बजाय एक साधारण स्केल के रूप में परिभाषित किया जा सकता है, जहां सीमा सीमा से पिक्सेल स्पेस में है।

मेरा अनुमान है कि आपको पीछे की ओर काम करने और पिक्सेल को डोमेन मानों में अनुवाद करने की आवश्यकता है। मुझे यह सवाल मिला क्योंकि मैं वही काम करने की कोशिश कर रहा हूं। अगर मैं इसे समझता हूं, तो मैं आपको बता दूंगा।

संपादित करें: शुरू करने के लिए यहां एक शानदार उदाहरण है।

http://philau.willbowman.com/2012/digitalInnovation/DevelopmentReferences/LIBS/d3JS/examples/brush/brush-ordinal.html

function brushmove() { 
    var s = d3.event.target.extent(); 
    symbol.classed("selected", function(d) { return s[0] <= (d = x(d)) && d <= s[1]; }); 
} 

वह पकड़ लेता है चयन हद (पिक्सेल में), तो श्रृंखला के सभी तत्वों का चयन करता है और निर्धारित करता है कि वे किस हद तक भीतर झूठ है या नहीं। आप उस पर आधारित तत्वों को फ़िल्टर कर सकते हैं, और डेटा कुंजी वापस कर सकते हैं या आप अपने फ़िल्टर में क्या जोड़ सकते हैं।

+0

अरे धन्यवाद, मैंने पहले ही यह उदाहरण देखा था लेकिन शायद मैं इसे काफी करीब से नहीं देख रहा हूं :)। मैं अपने कोड पर करीब देखूंगा और देख सकता हूं कि मैं पिक्सेल से डोमेन मानों का अनुवाद कैसे कर सकता हूं। अभी मेरे पास कोई सुराग नहीं है। haha। यदि आप अपना काम करते हैं तो मैं वास्तव में एक अपडेट की सराहना करता हूं। :) –

1

यहाँ brushing के साथ एक क्रमसूचक पैमाने का एक उदाहरण है:

http://bl.ocks.org/chrisbrich/4173587

मूल विचार @gumballhead के रूप में पता चलता है, आप पिक्सेल मान इनपुट डोमेन पर वापस पेश करने के लिए जिम्मेदार हैं। उदाहरण से प्रासंगिक स्निपेट है:

brushed = function(){var selected = yScale.domain().filter(function(d){return (brush.extent()[0] <= yScale(d)) && (yScale(d) <= brush.extent()[1])});      
          d3.select(".selected").text(selected.join(","));} 
संबंधित मुद्दे