【发布时间】:2016-09-26 06:25:13
【问题描述】:
我正在参加关于 D3.js 的 Udemy 课程。
不幸的是,由于新版本 D3.js 的出现,没有任何关于其新语法的最新教程,所以我浏览了他们的 API wiki。
话虽如此,我一直在纠结如何翻译这段代码(第 3 版)。我正在学习序数比例
var data = [
{key: "Glazed", value: 132},
{key: "Jelly", value: 71},
{key: "Holes", value: 337},
{key: "Sprinkles", value: 93},
{key: "Crumb", value: 78},
{key: "Chocolate", value: 43},
{key: "Coconut", value: 20},
{key: "Cream", value: 16},
{key: "Cruller", value: 30},
{key: "Éclair", value: 8},
{key: "Fritter", value: 17},
{key: "Bearclaw", value: 21}
];
var w = 800;
var h = 450;
var margin = {
top: 20,
bottom: 20,
left: 20,
right: 20
};
var width = w - margin.left - margin.right;
var height = h - margin.top - margin.bottom;
var x = d3.scale.linear()
.domain([0, d3.max(data, function(d){
return d.value;
})])
.range([0, width]);
var y = d3.scale.ordinal()
.domain(data.map(function(entry){
return entry.key;
}))
.rangeBands([0, height]);
var svg = d3.select("body").append("svg")
.attr("id", "chart")
.attr("width", w)
.attr("height", h);
var chart = svg.append("g")
.classed("display", true)
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
function plot(params){
this.selectAll(".bar")
.data(params.data)
.enter()
.append("rect")
.classed("bar", true)
.attr("x", 0)
.attr("y", function(d,i){
return y(d.key);
})
.attr("height", function(d,i){
return y.rangeBand()-1;
})
.attr("width", function(d){
return x(d.value);
});
this.selectAll(".bar-label")
.data(params.data)
.enter()
.append("text")
.classed("bar-label", true)
.attr("x", function(d){
return x(d.value);
})
.attr("dx", -4)
.attr("y", function(d,i){
return y(d.key);
})
.attr("dy", function(d,i){
return y.rangeBand()/1.5+2;
})
.text(function(d){
return d.value;
})
}
plot.call(chart, {data: data});
到版本 4。
查看他们的API Wiki,似乎摆脱了rangeBand函数CHANGES.MD
我已经尽力翻译了,但我无法弄清楚它有什么问题:
var data = [
{key: "Glazed", value: 132},
{key: "Jelly", value: 71},
{key: "Holes", value: 337},
{key: "Sprinkles", value: 93},
{key: "Crumb", value: 78},
{key: "Chocolate", value: 43},
{key: "Coconut", value: 20},
{key: "Cream", value: 16},
{key: "Cruller", value: 30},
{key: "Éclair", value: 8},
{key: "Fritter", value: 17},
{key: "Bearclaw", value: 21}
];
var w = 800;
var h = 450;
var margin = {
top: 20,
bottom: 20,
left: 20,
right: 20
};
var width = w - margin.left - margin.right;
var height = h - margin.top - margin.bottom;
var x = d3.scaleLinear()
.domain([0, d3.max(data, function(d){
return d.value;
})])
.range([0, width]);
var y = d3.scaleOrdinal()
.domain(data.map(function(entry){
return entry.key;
}))
.range([0, height]);
var svg = d3.select("body").append("svg")
.attr("id", "chart")
.attr("width", w)
.attr("height", h);
var chart = svg.append("g")
.classed("display", true)
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
function plot(params){
this.selectAll(".bar")
.data(params.data)
.enter()
.append("rect")
.classed("bar", true)
.attr("x", 0)
.attr("y", function(d,i){
return y(d.key);
})
.attr("height", function(d,i){
return y.range(1)-1;
})
.attr("width", function(d){
return x(d.value);
});
this.selectAll(".bar-label")
.data(params.data)
.enter()
.append("text")
.classed("bar-label", true)
.attr("x", function(d){
return x(d.value);
})
.attr("dx", -4)
.attr("y", function(d,i){
return y(d.key);
})
.attr("dy", function(d,i){
return y.range(1)/1.5+2;
})
.text(function(d){
return d.value;
})
}
plot.call(chart, {data: data});
【问题讨论】:
标签: javascript d3.js