2012-11-27 17 views
19

मेरे पास एक डी 3 बार चार्ट है जिसका मान 0-3 से है। मैं केवल शो पूर्णांक मूल्यों, जो मैं द्वाराडी 3 टिक अंक पूर्णांक पर केवल

var yAxis = d3.svg.axis().scale(y).orient("right").tickFormat(d3.format("d")); 

कर सकते हैं हालांकि, अभी भी गैर पूर्णांक चिह्नों पर निशान टिक कर रहे हैं करने के लिए y- अक्ष चाहते हैं। टिक प्रारूप सेट करना केवल उन लेबल को छुपाता है। मैं स्पष्ट रूप से टिक या टिक मानों की संख्या निर्धारित कर सकता हूं, लेकिन मैं जो करना चाहता हूं वह यह निर्दिष्ट करने में सक्षम होना चाहिए कि टिक चिह्न केवल पूर्णांक मानों पर दिखाई देते हैं। क्या यह संभव है?

enter image description here

उत्तर

16

आप जोड़ सकते हैं .ticks (4) और .tickSubdivide (0) मैं नीचे किया है के रूप में:

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("right") 
    .ticks(4) 
.tickFormat(d3.format("d")) 
    .tickSubdivide(0); 
+0

दुर्भाग्य से यह काम नहीं लग रहा था। मैंने यह देखा है कि यह कैसा दिखता है (मेरे पास टिकपैडिंग 8 नहीं है, लेकिन इससे कोई फर्क नहीं पड़ता)। इस तथ्य को अनदेखा करें कि शीर्ष और निचले लेबल कटऑफ हैं, मैं अभी भी उस हिस्से पर काम कर रहा हूं। –

+1

'.tickSubdivide (0) 'चाल चलाना चाहिए। क्या आपके पास आपके डेटा में गैर-पूर्णांक मान हैं? आप dt.format ("d") या d3.format ("f") को .tickSubdivide के साथ बनाने का प्रयास करना चाह सकते हैं। ब्राउजर कैश को साफ़ करना भी सुनिश्चित करें। आप सही हैं। टिकपैडिंग यहां अप्रासंगिक है। –

+0

सभी डेटा पूर्णांक डेटा है, और मैंने ठीक वैसे ही कोशिश की है जैसा आपके पास है, और यह अभी भी ऊपर की छवि जैसा दिखता है ... –

6

आप प्रोग्राम के data.length - 1 को टिक की संख्या निर्धारित कर सकते हैं (इस को हल करती है मुद्दा आप टिक की कम संख्या के लिए कर रहे थे के रूप में अच्छी तरह से)

var yAxis = d3.svg.axis() 
    .scale(y) 
    .orient("right") 
    .tickFormat(d3.format("d")) 
    .ticks(data.length - 1) 
+1

डेटा। लम्बाई - 1 एक्स-अक्ष से संबंधित है, वाई-अक्ष पर टिक सेट करते समय इसका उपयोग क्यों किया जाना चाहिए? बेहतर होगा sth। वाई-अक्ष पर टिक को परिभाषित करने के लिए अधिकतम-मूल्य की तरह – peter

1

गतिशील चार्ट पर यह काम करने के लिए इस टिप प्रयुक्त (पेज पर 1 या अधिक चार्ट)

यह चाल है। मैं Math.min (maxHeight + 1, yAxis.ticks()) में बदल गया है, इसलिए यदि ग्राफ की ऊंचाई की संख्या की तुलना में कम है, तो यह टिकों की संख्या को कम कर देता है। - जेफ स्टोरी नवंबर 28 '12 2:47

// It is either 10 or Maximum Chart height + 1 

     var graphValues = selection.data()[0].map(function(obj) { 
      return obj['count']; 
     }).compact(); 

     Array.prototype.maxValArray = function() { 
      return Math.max.apply(null, this); 
     }; 

     var maxValue = graphValues.maxValArray(); 

     yAxis.ticks(Math.min(maxValue + 1, 10)) 
0

सभी सूचीबद्ध समाधान से पर, मैं टिक के निशान बंद छुटकारा पाने के लिए नहीं कर पाए हैं।

.xAxis().ticks(4) 
.tickFormat(d3.format("d")); 

लेबल हटाएं लेकिन टिक नहीं।

तो मैं टिक() पर एक थ्रेसहोल्ड लागू करने का प्रस्ताव करता हूं। यदि 4 से कम है तो यह सीमा पर ही सेट हो जाता है (0,1,2,3)। इसके साथ किया गया है:

.on("preRedraw", function(chart) { 
    var maxTick = chart.group().top(1)[0].value; 
    if (maxTick < 4) { 
     chart.xAxis().ticks(maxTick); 
    } else { 
     chart.xAxis().ticks(4); 
    } 

});

एक jsfiddle से https://jsfiddle.net/PBrockmann/k7qnw3oj/

उपलब्ध है मुझे पता है अगर वहाँ एक सरल समाधान में है।

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