में एक सामान्य स्केल के साथ एक लेबल लेबल वाला एक्स-एक्सिस बनाना, मैं एक 3 डी अक्ष के साथ d3.js में एक बार चार्ट बना रहा हूं जिसका टिक चार्ट के साथ चार्ट को लेबल करना चाहिए। क्या कोई यह समझा सकता है कि क्रमिक पैमाने "मानचित्र" x संबंधित बार पदों पर कैसे टिकता है? विशेष रूप से, यदि मैं x टिक लेबल को टेक्स्ट मानों की सरणी के साथ बार चार्ट में संबंधित बार में निर्दिष्ट करना चाहता हूं।डी 3.जेएस
वर्तमान में मैं निम्नलिखित के रूप में डोमेन सेट कर रहा हूं:
var labels = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"];
var xScale = d3.scale.ordinal()
.domain(labels)
हालांकि, 1-19 के मूल्यों पाठ लेबल के बाद दिखा रहे हैं।
के रूप में इस बेला में देखी गई:
http://jsfiddle.net/chartguy/FbqjD/
एसोसिएटेड फिडल स्रोत कोड:
//Width and height
var margin = {top: 20, right: 20, bottom: 30, left: 40};
var width = 600 - margin.left - margin.right;
var height= 500-margin.top -margin.bottom;
var w = width;
var h = height;
var dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, 15, 13,
11, 12, 15, 20, 18, 17, 16, 18, 23, 25 ];
var labels = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t"];
var xScale = d3.scale.ordinal()
.domain(labels)
.rangeRoundBands([margin.left, width], 0.05);
var xAxis = d3.svg.axis().scale(xScale).orient("bottom");
var yScale = d3.scale.linear()
.domain([0, d3.max(dataset)])
.range([h,0]);
//Create SVG element
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
//Create bars
svg.selectAll("rect")
.data(dataset)
.enter()
.append("rect")
.attr("x", function(d, i) {
return xScale(i);
})
.attr("y", function(d) {
return yScale(d);
})
.attr("width", xScale.rangeBand())
.attr("height", function(d) {
return h - yScale(d);
})
.attr("fill", function(d) {
return "rgb(0, 0, 0)";
});
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + 0 + ")")
.call(xAxis);
//Create labels
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.text(function(d) {
return d;
})
.attr("x", function(d, i) {
return xScale(i) + xScale.rangeBand()/2;
})
.attr("y", function(d) {
return h - yScale(d) + 14;
});
तो लिंकिंग के बजाय डी 3 में एक-ऑब्जेक्ट में मूल्य-लेबल जोड़ों को शामिल करने के बारे में क्या है यह किसी ऑब्जेक्ट को किसी ऑब्जेक्ट और मानों के लिए लेबल करता है। मैं आपकी प्रतिक्रिया की सराहना करता हूं, लेकिन मैं अतिरिक्त मील जाना चाहता हूं और पता हूं कि दृश्यों के पीछे क्या चल रहा है, इसलिए मैं सिर्फ संयोग से प्रोग्रामिंग नहीं कर रहा हूं। – arete
ऐसा इसलिए है क्योंकि आप डेटा के एक सेट के साथ स्पष्ट रूप से डोमेन को परिभाषित कर रहे हैं, फिर जब आप '.attr (" x ", फ़ंक्शन (डी, i) {वापसी xScale (i);}) करते हैं तो इसे एक और सेट पास कर दें। एपीआई संदर्भ से [प्रासंगिक रेखा] (https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_domain) कहता है: "यदि डोमेन स्पष्ट रूप से सेट किया गया है, मान उस पैमाने पर पारित किए गए थे जो नहीं थे स्पष्ट रूप से डोमेन का हिस्सा जोड़ा जाएगा। " इस अंत में, आप देख सकते हैं कि आपके मूल कोड में एक्स अक्ष को संदर्भित करने से पहले केवल आपके स्पष्ट सरणी को बुलाया जाएगा। – nsonnad