2013-07-22 17 views
7

क्या डी 3 में कोई रास्ता नहीं है जिससे टिक लेबल ओवरलैप नहीं किया जा सके? उदाहरण के लिए, यदि मेरे पास बार चार्ट है, लेकिन बार केवल 5 पिक्सल चौड़े हैं और लेबल 10 पिक्सेल चौड़े हैं, तो मैं एक गड़बड़ वाली गड़बड़ी के साथ समाप्त होता हूं। मैं वर्तमान में लेबल को आकर्षित करने के लिए कार्यान्वयन पर काम कर रहा हूं जब वे ओवरलैप नहीं करते हैं। मुझे ऐसा करने का कोई मौजूदा तरीका नहीं मिल रहा है, लेकिन यह सुनिश्चित नहीं था कि किसी और ने इस समस्या का सामना किया हो।डी 3 ऑटोस्पेस ओवरलैपिंग टिक लेबल

उत्तर

6

डी 3 में स्वचालित रूप से ऐसा करने का कोई तरीका नहीं है। आप टीकों या टिक मानों की संख्या को स्पष्ट रूप से सेट कर सकते हैं (the documentation देखें), लेकिन आपको संबंधित संख्या/मान स्वयं को समझना होगा। एक और विकल्प लेबल को घुमाएगा जैसे कि ओवरलैपिंग का कम मौका है।

वैकल्पिक रूप से, जैसा कि दूसरे उत्तर में सुझाया गया है, आप लेबल्स को रखने के लिए बल लेआउट का उपयोग करने का प्रयास कर सकते हैं। स्पष्टीकरण के लिए, आप केवल लेबल पर बल लेआउट का उपयोग करेंगे - यह चार्ट के प्रकार से पूरी तरह से स्वतंत्र है। मैंने इसे this example में किया है, जो कि दूसरे उत्तर में लिंक किए गए से थोड़ा अधिक प्रासंगिक है।

ध्यान दें कि यदि आप बल लेआउट समाधान के साथ जाते हैं, तो आपको लेबल की स्थिति को एनिमेट करने की आवश्यकता नहीं है। जब तक यह अभिसरण नहीं हो जाता तब तक आप बल लेआउट की गणना कर सकते हैं और फिर लेबल को प्लॉट कर सकते हैं।

1

आप विशेष रूप से कुछ this थ्रेड में उल्लिखित की कोशिश कर सकते, this example ताकि लेबल ऊपर धकेल दिया जाता है/नीचे/जिस तरह से इतना है कि वे सब में फिट किया जा सकता है से बाहर। यह एक अलग बलों, नोड्स के लिए एक का उपयोग की आवश्यकता है और लेबल खुद के लिए एक और।

+0

मैं एक बल लेआउट का उपयोग नहीं कर रहा हूँ। मेरे पास एक बार चार्ट है। –

2

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

var $svg = $('#svg'); 

// get the last tick of each of my sub-axis 
$('.tick-axis').find('.tick:last-of-type').each(function() { 

    // get position of the end of this text field 
    var endOfTextField = $(this).offset().left + $(this).find('text').width(); 

    // get the next vertical axis 
    var $nextAxis = $('line[data-axis="' + $(this).closest('.tick-axis').attr('data-axis') + '"]'); 

    // there is no axis on the very right, so just use the svg width 
    var positionOfAxis = ($nextAxis.length > 0) ? $nextAxis.offset().left : $svg.offset().left + $svg.width(); 

    // hide the ugly ones! 
    if (endOfTextField > positionOfAxis) { 
    $(this).attr('class', 'tick hide'); 
    } 

}); 

color: aqua साथ टिक्स छिपा लोगों रहे हैं:

enter image description here

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