博客
关于我
D3比例尺与坐标轴
阅读量:292 次
发布时间:2019-03-01

本文共 3308 字,大约阅读时间需要 11 分钟。

D3比例尺与坐标轴的详细指南

D3.js 是一个强大的数据可视化库,能够帮助开发者轻松创建交互式的数据图表。其中,比例尺和坐标轴是数据可视化中至关重要的组成部分。本文将详细介绍 D3 的比例尺类型及其应用示例,并提供坐标轴的使用方法。


1. 比例尺的分类

比例尺根据定义域和值域的处理方式可以分为以下几种类型:

1.1 连续比例尺 (Continuous Scales)

连续比例尺将一个连续的定义域映射到另一个连续的值域。常见类型包括线性比例尺、指数比例尺、对数比例尺、恒等比例尺和时间比例尺。

  • 线性比例尺 (Linear Scale)

    通过 d3.scaleLinear() 创建。默认定义域为 [0, 1],值域为 [0, 1]。输出值可以表示为 y = mx + b,其中 x 为定义域值。

  • 指数比例尺 (Power Scale)

    通过 d3.scalePow() 创建。默认指数为 1,与线性比例尺效果相同。可以通过 pow.exponent() 方法设置指数。

  • 对数比例尺 (Log Scale)

    通过 d3.scaleLog() 创建。默认基数为 10。输出值可以表示为 y = m log(x) + b

  • 恒等比例尺 (Identity Scale)

    通过 d3.scaleIdentity() 创建。定义域和值域完全相同。

  • 时间比例尺 (Time Scale)

    通过 d3.scaleTime() 创建。输入值会被强制转为日期类型,适用于时间序列数据。

1.2 序列比例尺 (Sequential Scales)

序列比例尺将连续的定义域映射到连续的值域,但其插值器和值域不可配置。使用 d3.scaleSequential(interpolate) 创建,适用于周期性颜色或渐变色彩的映射。

1.3 发散比例尺 (Diverging Scales)

发散比例尺类似于序列比例尺,但输出值根据插值器计算,可用于发散色彩映射。通过 d3.scaleDiverging(interpolate) 创建。

1.4 量化比例尺 (Quantize Scales)

量化比例尺将连续的定义域划分为离散的区间,适用于离散的值域映射。通过 d3.scaleQuantize() 创建,常用于颜色映射或分类。

1.5 分位比例尺 (Quantile Scales)

分位比例尺将离散的定义域映射到离散的值域,通常用于统计数据的分位数分析。

1.6 阈值比例尺 (Threshold Scales)

阈值比例尺根据定义域的值选择特定的值域值,常用于分类数据。

1.7 序数比例尺 (Ordinal Scales)

序数比例尺将离散的定义域映射到离散的值域,适用于类别数据的标注或编号。

1.8 分段比例尺 (Band Scales)

分段比例尺将连续的定义域划分为均匀的区间,常用于条形图或类别数据的展示。通过 d3.scaleBand() 创建。


2. 坐标轴的使用

坐标轴是数据可视化中重要的组成部分,用于辅助读者理解数据的分布和关系。以下是创建坐标轴的步骤示例。

2.1 柱状图的坐标轴

以下是创建柱状图的坐标轴的示例:

import * as d3 from "d3";// 数据集const dataset = [20, 43, 120, 87, 99, 167, 142];// SVG 设置const width = 600, height = 600;const svg = d3.select("body")  .append("svg")  .attr("width", width)  .attr("height", height)  .style("background-color", "#e5e5e5");// 坐标轴比例尺const xScale = d3.scaleBand()  .domain(d3.range(dataset.length))  .rangeRound([0, width - padding.left - padding.right]);const yScale = d3.scaleLinear()  .domain([0, d3.max(dataset)])  .range([height - padding.top - padding.bottom, 0])  .nice();// 创建坐标轴const xAxis = d3.axisBottom(xScale);const yAxis = d3.axisLeft(yScale);// 在 SVG 中添加坐标轴svg.append("g")  .attr("transform", `translate(${padding.left},${height - padding.bottom})`)  .call(xAxis);svg.append("g")  .attr("transform", `translate(${padding.left},${padding.top})`)  .call(yAxis);

2.2 散点图的坐标轴

以下是创建散点图的坐标轴的示例:

import * as d3 from "d3";// 数据集const center = [  [0.5, 0.5], [0.7, 0.8], [0.4, 0.9], [0.11, 0.32], [0.88, 0.25],  [0.75, 0.12], [0.5, 0.1], [0.2, 0.3], [0.4, 0.1], [0.6, 0.7]];// SVG 设置const width = 700, height = 600;const padding = { top: 50, right: 50, bottom: 50, left: 50 };// 创建比例尺const xScale = d3.scaleLinear()  .domain([0, 1.2 * d3.max(center, d => d[0])])  .range([0, width - padding.left - padding.right])  .nice();const yScale = d3.scaleLinear()  .domain([0, 1.2 * d3.max(center, d => d[1])])  .range([height - padding.top - padding.bottom, 0])  .nice();// 创建坐标轴const xAxis = d3.axisBottom(xScale);const yAxis = d3.axisLeft(yScale);// 在 SVG 中添加坐标轴const gs = d3.select("body")  .append("svg")  .attr("width", width)  .attr("height", height)  .style("background-color", "#e5e5e5")  .append("g");// 添加坐标轴gs.append("g")  .attr("transform", `translate(${padding.left},${height - padding.bottom})`)  .call(xAxis);gs.append("g")  .attr("transform", `translate(${padding.left},${padding.top})`)  .call(yAxis);

3. 总结

比例尺和坐标轴是数据可视化中核心的工具。通过选择合适的比例尺类型,可以实现数据的精确展示。无论是连续比例尺、序列比例尺,还是分段比例尺,每种类型都有其独特的应用场景。在实际开发中,需要根据数据的性质选择最合适的比例尺,并结合坐标轴进行精确的调节,以确保最终的数据图表既美观又具有可读性。

转载地址:http://legx.baihongyu.com/

你可能感兴趣的文章
OSG学习:OSG组成(一)——组成模块
查看>>
OSG学习:OSG组成(三)——组成模块(续):OSG核心库中的一些类和方法
查看>>
OSG学习:OSG组成(二)——场景树
查看>>
OSG学习:OSG组成(二)——渲染状态和纹理映射
查看>>
OSG学习:WIN10系统下OSG+VS2017编译及运行
查看>>
OSG学习:人机交互——普通键盘事件:着火的飞机
查看>>
OSG学习:几何体的操作(一)——交互事件、简化几何体
查看>>
OSG学习:几何体的操作(二)——交互事件、Delaunay三角网绘制
查看>>
OSG学习:几何对象的绘制(一)——四边形
查看>>
OSG学习:几何对象的绘制(三)——几何元素的存储和几何体的绘制方法
查看>>
OSG学习:几何对象的绘制(二)——简易房屋
查看>>
OSG学习:几何对象的绘制(四)——几何体的更新回调:旋转的线
查看>>
OSG学习:场景图形管理(一)——视图与相机
查看>>
OSG学习:场景图形管理(三)——多视图相机渲染
查看>>
OSG学习:场景图形管理(二)——单窗口多相机渲染
查看>>
OSG学习:场景图形管理(四)——多视图多窗口渲染
查看>>
OSG学习:新建C++/CLI工程并读取模型(C++/CLI)——根据OSG官方示例代码初步理解其方法
查看>>
Sql 随机更新一条数据返回更新数据的ID编号
查看>>
OSG学习:空间变换节点和开关节点示例
查看>>
OSG学习:纹理映射(一)——多重纹理映射
查看>>