当前位置: 首页 > 文档资料 > D3.js 帮助文档 >

d3-axis

优质
小牛编辑
126浏览
2023-12-01

坐标轴组件可以将 scales 显示为人类友好的刻度标尺参考,减轻了在可视化中的视觉任务。

Installing

使用 NPM 安装: npm install d3-axis, 还可以下载 latest release(最新版)。此外还可以直接从 d3js.orgstandalone library(标准库) 或者作为 D3 4.0 的一部分直接载入(实际使用时可能还需要 d3-scaled3-selection 但是并没有依赖关系)。支持 AMDCommonJS 以及标签引入形式,如果使用标签引入则会暴露全局 d3 变量:

<script src="https://d3js.org/d3-axis.v1.min.js"></script>
<script>

var axis = d3.axisLeft(scale);

</script>

在浏览器中测试 d3-axis

API Reference

无论坐标轴的方向如何,都以原点为起点开始渲染。如果要改变坐标轴的位置,则需要通过 变换属性来实现,例如:

d3.select("body").append("svg")
    .attr("width", 1440)
    .attr("height", 30)
  .append("g")
    .attr("transform", "translate(0,30)")
    .call(axis);

坐标轴组件创建的元素遵循元素公共 API,因此可以自由的设置外部样式或者修改元素来 (自定义表现形式)

Custom Axis

坐标轴组件包含类名为 “domain” 的 path元素 表示比例尺的输入范围,一组类名为 “tick” 的并且被坐标变换的 g 元素 表示比例尺的刻度。每个刻度包含一个 line 元素 表示刻度线以及一个 text 元素 表示刻度标签。例如,刻度朝下的坐标轴组件结构如下:

<g fill="none" font-size="10" font-family="sans-serif" text-anchor="middle">
  <path class="domain" stroke=""https://github.com/d3/d3-axis/blob/master/src/axis.js" title="Source" target="_blank" rel="noopener noreferrer"><源码>

使用给定的 scale 构建一个刻度在上的坐标轴生成器, 默认 tick arguments 为空, tick size 为 6, padding 为 3. 坐标轴为水平方向

d3.axisRight(scale) <源码>

使用给定的 scale 构建一个刻度在右的坐标轴生成器, 默认 tick arguments 为空, tick size 为 6, padding 为 3. 坐标轴为垂直方向

d3.axisBottom(scale) <源码>

使用给定的 scale 构建一个刻度在下的坐标轴生成器, 默认 tick arguments 为空, tick size 为 6, padding 为 3. 坐标轴为水平方向

d3.axisLeft(scale) <源码>

使用给定的 scale 构建一个刻度在左的坐标轴生成器, 默认 tick arguments 为空, tick size 为 6, padding 为 3. 坐标轴为垂直方向

axis(context) <源码>

将坐标轴渲染到指定的 context, context 可能是一个包含SVG元素的 selection(SVG 或者 G 元素) 也可能是一个 transition.

axis.scale([scale]) <源码>

如果指定了 scale 则设置坐标轴的 scale,如果没有指定 scale 则返回当前坐标轴所使用的比例尺。

axis.ticks(arguments…) <源码>
"https://github.com/d3/d3-scale/blob/master/README.md" target="_blank" rel="noopener noreferrer">scale.ticks 和 scale.tickFormat 并且返回当前坐标轴生成器. 也就是 arguments 依赖 axis’ scale: 大多数情况下建议传入一个期望的 ticks 个数: count (或者当使用时间比例尺时传入 time interval), 或者是 format specifier 定义刻度的展示格式。

这个方法有局限,当使用 bandpoint 比例尺时没有作用,但是 axis.tickValues. 和 axis.tickFormat 不受比例尺类型限制。

比如当使用国际单位格式并且刻度参考个数为 20 的线性比例尺:

axis.ticks(20, "s");

每隔 15 分钟生成一个刻度的时间比例尺:

axis.ticks(d3.timeMinute.every(15));

这个方法也可以看做是 axis.tickArguments 的简写,例如:

axis.ticks(10);

等价于:

axis.tickArguments([10]);

axis.tickArguments([arguments]) <源码>

如果设置了 arguments 则将其传递给 scale.ticksscale.tickFormat 并且返回当前坐标轴生成器。也就是 arguments 依赖 axis’ scale: 大多数情况下建议传入一个期望的 ticks个数: count (或者当使用时间比例尺时传入 time interval), 或者是 format specifier 定义刻度的展示格式。

这个方法有局限,当使用 bandpoint 比例尺时没有作用,但是 axis.tickValues. 和 axis.tickFormat 不受比例尺类型限制。

如果没有指定 arguments 则返回当前的 tick 参数,默认是一个空数组。

比如当使用国际单位格式并且刻度参考个数为 20 的线性比例尺:

axis.tickArguments([20, "s"]);

每隔 15 分钟生成一个刻度的时间比例尺:

axis.tickArguments([d3.timeMinute.every(15)]);

参考 axis.ticks.

axis.tickValues([values]) <源码>

如果指定了 values 数组,则使用指定的数组作为刻度而不是自动计算刻度。如果 valuesnull 则清除之前设置的显示刻度参数,也就是如果之前设置过values 则可以使用 null 将其取消。如果没有指定 values 则返回当前的刻度值参数,默认为 null。例如使用指定的数组作为刻度:

var xAxis = d3.axisBottom(x)
    .tickValues([1, 2, 3, 5, 8, 13, 21]);

通过 axis.tickValues 设置刻度的优先级大于通过 axis.tickArguments 设置的优先级。但是如果没有设置格式化仍然会参考tickFormat 去对文本标签进行格式化。

axis.tickFormat([format]) <源码>

如果指定了 format 则设置刻度文字标签格式化方法。如果没有指定 format 则返回当前的刻度文本格式化方法,默认为 null。在没有设置格式化方法的情况下,会使用默认的 scale.tickFormat 去生成刻度文本. 在这种情况下通过 axis.tickArguments 设置的格式化方法会直接被 scale.tickFormat 使用

参考 d3-format 和 d3-time-format 获取关于格式化的更多信息。例如,要使用逗号分组来表示千分位数:

axis.tickFormat(d3.format(",.0f"));

为方便,可以直接将格式化字符串通过以下形式直接传递给 axis.ticks:

axis.ticks(10, ",f");

使用这种方法可以基于刻度间隔自动设置精度.

axis.tickSize([size]) <源码>

如果指定了 size 则设置 内侧 和 外侧 刻度的大小,并返回坐标轴生成器。如果没有指定 size 则返回当前的刻度大小,默认为 6。

axis.tickSizeInner([size]) <源码>

如果指定了 size 则设置内侧刻度大小,如果没有指定 size 则返回当前的刻度大小,默认为 6。内侧刻度大小控制着刻度线的长度。

axis.tickSizeOuter([size]) <源码>

如果指定了 size 则设置外侧刻度大小,如果没有指定 size 则返回当前的刻度大小,默认为 6。外侧刻度大小控制着刻度线的长度。外侧刻度表示的是坐标轴最外侧两端的刻度线。内侧刻度和外侧刻度不同,内侧刻度是一个个单独的 line 元素,而外侧刻度则实际上是坐标轴线 path 的一部分。此外外侧刻度可能和第一个或最后一个内侧刻度重合。

axis.tickPadding([padding]) <源码>

如果设置了 padding 则设置刻度和刻度文本之间的间距,如果没有指定 padding 则返回当前的间距,默认为 3 像素。

最后更新:

类似资料

  • 视图移动以及缩放是一种将用户注意力聚焦在感兴趣区域的一种流行的交互技术。操作直接,容易理解: 点击并拖拽平移,使用滚轮进行缩放,当然也可以通过触摸进行。平移和缩放被广泛的应用在地图中,但是也可被应用到其他的可视化比如时间序列以及散点图中。 缩放行为通过 d3-zoom 模块实现,能方便且灵活到 selections 上。它处理了许多 Installing NPM 安装: npm install d

  • 这个模块实现了用来计算一组二维点 Voronoi diagram(泰森多边形) 或 Delaunay triangulation(德劳内三角剖分) 的 Steven J. Fortune’s algorithm 算法。这个模块的实现大多是基于 Raymond Hill 的工作。 泰森多边形不仅仅在视觉上具有吸引力,在交互方面也非常实用,比如在散点图中增加点的目标面积。参考 “Strikeouts

  • transition 是一个类 selection 的接口,用来对 DOM 进行动画修改。这种修改不是立即修改,而是在规定的事件内平滑过渡到目标状态。 应用过渡,首先要选中元素,然后调用 selection.transition,并且设置期望的改变,例如: d3.select("body") .transition() .style("background-color", "red")

  • 这个模块提供了一个高效的队列,能管理上千并发动画同时保证与并发或分段动画一致的同步时序。在内部使用 requestAnimationFrame 进行 fluid animation(如果支持的话),否则切换使用 setTimeout来实现。 Installing NPM 安装: npm install d3-timer. 此外还可以下载 latest release。也可以直接从 d3js.org

  • 在可视化时间序列数据、分析时间模式或处理一般时间时,常规时间单位的不规则性很快就变得明显起来。在 Gregorian calendar(公历) 中,大多数月份有 31 天但是有些月份只有 28 或者 29、30 天。大多数年份有 365 天但是 leap years(闰年) 有 366 天。在 daylight saving(夏令时) 中一天可能有 23 25 小时。更复杂的是世界各地的夏时制不同

  • 可视化通常由离散图形标记组成, 比如 symbols, arcs, lines 和 areas。虽然条形的矩形可以很容易的使用 SVG 或者 Canvas 来生成, 但是其他的比如圆形的扇形以及向心 Catmull-Rom 样条曲线就很复杂。这个模块提供了许多图形生成器以便使用。 与 D3 的其他特性一样,这些图形也是又数据驱动的: 每个图形生成器都暴露了一个如何将数据映射到可视化表现的访问器。例