比例尺

作者: 一世长安乱 | 来源:发表于2018-07-09 13:04 被阅读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()
    针对日期和时间值的一个比例尺方法, 可以对日期刻度作特殊处理。

相关文章

网友评论

      本文标题:比例尺

      本文链接:https://www.haomeiwen.com/subject/lhgzuftx.html