比例尺

使用比例尺的散点图
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()
    针对日期和时间值的一个比例尺方法, 可以对日期刻度作特殊处理。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 比例尺:就像函数一样,将一个量转换为另一个量,定义域到值域的转换。每个比例尺都需要指定一个domain(定义域)和...
    陆lmj阅读 1,039评论 0 0
  • 比例尺 连续比例尺continuous continuous(value) //给定domain范围中的一个val...
    Doter阅读 588评论 0 0
  • 序数比例尺的定义域和值域都是离散的。,如果需要通过输入一些离散的值得到另一些离散的值,这时候就要考虑序数比例尺。 ...
    陆lmj阅读 1,298评论 1 0
  • 线性比例尺 Linear Scale d3.scale.linear() 创建线性比例尺 linear.domai...
    code小栈阅读 1,229评论 0 0
  • 一般情况下,成年人都有繁重的生活压力,紧张的生活节奏往往使他们疏忽了身体上的一些不适,老年人则身体营养元素流失过多...
    爱生活爱巴西阅读 1,592评论 0 0