2013-06-18 11 views
7

में पाई (डोनट) चार्ट सेगमेंट ऑर्डर मेरे पास एक jQuery स्लाइडर के साथ डी 3 का उपयोग करके बनाया गया एक डोनट चार्ट है जो उपयोगकर्ता को विभिन्न डेटा-पॉइंट्स के बीच चयन करने की अनुमति देता है। चार्ट डेटा मानों के बीच संक्रमण को एनिमेट करता है और सब ठीक है।डी 3

समस्या: खंड हमेशा घड़ी के आकार के क्रम में (सबसे बड़े से छोटे तक) में प्रस्तुत करते हैं। इसका मतलब है कि सेगमेंट चार्ट के चारों ओर अपने आकार के आधार पर अपनी स्थिति स्विच करते हैं।

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

कार्य js-बेला: http://jsfiddle.net/kerplunk/Q3dhh/

मेरा मानना ​​है कि समस्या समारोह जो वास्तविक tweening करता है में झूठ चाहिए:

// Interpolate the arcs in data space. 
function pieTween(d, i) { 
    var s0; 
    var e0; 
    if(oldPieData[i]){ 
    s0 = oldPieData[i].startAngle; 
    e0 = oldPieData[i].endAngle; 
    } else if (!(oldPieData[i]) && oldPieData[i-1]) { 
    s0 = oldPieData[i-1].endAngle; 
    e0 = oldPieData[i-1].endAngle; 
    } else if(!(oldPieData[i-1]) && oldPieData.length > 0){ 
    s0 = oldPieData[oldPieData.length-1].endAngle; 
    e0 = oldPieData[oldPieData.length-1].endAngle; 
    } else { 
    s0 = 0; 
    e0 = 0; 
    } 
    var i = d3.interpolate({startAngle: s0, endAngle: e0}, {startAngle: d.startAngle, endAngle: d.endAngle}); 
    return function(t) { 
    var b = i(t); 
    return arc(b); 
    }; 
} 

उत्तर

20

डी 3 स्वचालित रूप से पाई चार्ट के लिए मूल्य द्वारा क्रमबद्ध करता है। सौभाग्य से, छंटाई अक्षम करने के लिए काफी आसान है, बस donut समारोह पर sort(null) विधि, यानी .:

var donut = d3.layout.pie().value(function(d){ 
    return d.itemValue; 
}).sort(null); 

यहाँ एक fiddle का उपयोग करें।

+0

यह बहुत अच्छा काम करता है! आपका बहुत बहुत धन्यवाद। क्या यह कहीं कहीं दस्तावेज किया गया था कि मुझे यह मिलना चाहिए था? मैंने देखा (ईमानदार) :) – Kerplunk

+0

यह pie pieort के तहत पाई लेआउट के लिए दस्तावेज़ों में है। यूआरएल https://github.com/mbostock/d3/wiki/Pie-Layout है। – ckersch

+0

मुझे इस जवाब में मूल्य सामग्री थोड़ा अलग हो गई - क्योंकि सीकेर्स ने कहा कि यह आखिरी बिट है, '.sort (null)' जो सॉर्टिंग को बंद कर रहा है। – dumbledad