比例尺
2018-07-09 本文已影响0人
一世长安乱
使用比例尺的散点图
var dataset = [
[5, 20], [480, 90], [250, 50], [100, 33], [330, 95],
[410, 12], [475, 44], [25, 67], [85, 21], [220, 88]
];
var h = 100;
var w = 500;
var padding = 20;
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var xScale = d3.scaleLinear() // 生成比例尺
.domain([0, d3.max(dataset, function (d) {return d[0];})]) // 值域
.range([padding, w - padding * 2]); // 范围
var yScale = d3.scaleLinear() // 生成比例尺
.domain([0, d3.max(dataset, function (d) {return d[1];})]) // 值域
.range([h - padding, padding]);
var rScale = d3.scaleLinear()
.domain([0, d3.max(dataset, function (d) {return d[1];})])
.rangeRound([2, 5]);
svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("cx", function (d) {
return xScale(d[0]);
})
.attr("cy", function (d) {
return yScale(d[1]);
})
.attr("r", function (d) {
return rScale(d[1]);
});
svg.selectAll("text")
.data(dataset)
.enter()
.append("text")
.text(function (d) {
return d[0] + "," + d[1];
})
.attr("x", function (d) {
return xScale(d[0]);
})
.attr("y", function (d) {
return yScale(d[1]);
})
.attr("font-family", "sans-serif")
.attr("font-size", "11px")
.attr("fill", "red");
其他方法
-
nice()
告诉比例尺取得为 range() 设置的任何值域, 把两端的值扩展到最接近的整数。
根据 D3 的维基:“比如, 值域 [0.20147987687960267, 0.996679553296417]
的优化值域为 [0.2, 1]。 ” 这个方法对正常人都有用, 因为人不是计算机, 看到
0.20147987687960267 这样的数你一定会头大。 -
rangeRound()
用 rangeRound() 代替 range() 后, 则比例尺输出的所有值都会舍入到最接近
的整数值。 对输出值取整有利于图形对应精确的像素值, 避免边缘出现模糊不清
的锯齿。 -
lamp()
默认情况下, 线性比例尺可以返回指定范围之外的值。 例如, 假如给定的值位于
输入值域之外, 那么比例尺也会返回一个位于输出范围之外的值。 不过, 在比例
尺上调用 clamp(true) 后, 就可以强制所有输出值都位于指定的范围内。 这意味
着超出范围的值, 会被取整到范围的最低值或最高值(总之是最接近的那个值) 。
使用上述任何一个方法, 只要把它们连缀到定义原始比例尺的方法链即可。 比如,
要使用 nice(), 可以这样:
var scale = d3.scale.linear()
.domain([0.123, 4.567])
.range([0, 500])
.nice();
其他比例尺
-
sqrt
平方根比例尺。 -
pow
幂比例尺, 适合值以指数级变化的数据集。 -
log
对数比例尺。 -
quantize
输出范围为独立的值的线性比例尺, 适合想把数据分类的情形。 -
quantile
与 quantize 类似, 但输入值域是独立的值, 适合已经对数据分类的情形。 -
ordinal
使用非定量值(如类名) 作为输出的序数比例尺, 非常适合比较苹果和桔子。 -
d3.scale.category10()、 d3.scale.category20()、 d3.scale.category20b() 和 d3.scale.category20c()
能够输出 10 到 20 种类别颜色的预设序数比例尺, 非常方便。 -
d3.time.scale()
针对日期和时间值的一个比例尺方法, 可以对日期刻度作特殊处理。