iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >d3-scale和d3-scaleTime如何使用
  • 887
分享到

d3-scale和d3-scaleTime如何使用

2023-07-05 11:07:35 887人浏览 安东尼
摘要

这篇文章主要介绍“d3-scale和d3-scaleTime如何使用”,在日常操作中,相信很多人在d3-scale和d3-scaleTime如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”d3-scal

这篇文章主要介绍“d3-scale和d3-scaleTime如何使用”,在日常操作中,相信很多人在d3-scale和d3-scaleTime如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”d3-scale和d3-scaleTime如何使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

安装

npm install d3-scale

使用

import { scaleTime } from 'd3-scale';var x = scaleTime()    .domain([new Date(2000, 0, 1, 0), new Date(2000, 0, 1, 2)]);

api

连续标度将一个连续的、定量的输入域映射到一个连续的输出范围。如果范围也是数字的,那么映射可能是倒置的。不能直接构建一个连续标度,而是要尝试线性、功率、对数、特性、径向、时间或顺序色标。

continuous(value)

给定domain中的一个值,返回range中的相应值。如果给定的值在domain域之外,并且没有启用clamping功能,那么映射可能会被推断,从而使返回的值在范围之外。

例如,要应用一个位置编码:

var x = d3.scaleLinear()    .domain([10, 130])    .range([0, 960]);x(20); // 80x(50); // 320

或者应用颜色编码:

var color = d3.scaleLinear()    .domain([10, 100])    .range(["brown", "steelblue"]);color(20); // "#9a3439"color(50); // "#7b5167"

continuous.invert(value)

给定range内的一个值,返回domain内的相应值。反转对于交互很有用,比如说确定与鼠标位置对应的数据值。

例如,要反转一个位置编码:

var x = d3.scaleLinear()    .domain([10, 130])    .range([0, 960]);x.invert(80); // 20x.invert(320); // 50

如果给定的值在range之外,并且没有启用clamping功能,值对应的映射结果可能会被外推,从而使返回的值在域外。只有当范围是数字时才支持这个方法。如果范围不是数字,则返回NaN。

对于范围内的有效值y,continuous(continuous.invert(y))近似等于y;同样,对于域内的有效值x,continuous.invert(continuous(x))近似等于x。由于浮点精度的限制,比例及其逆向可能不准确。

continuous.domain([domain])

如果指定了domain,则将比例尺的域设置为指定的数字数组。该数组必须包含两个或更多的元素。如果给定数组中的元素不是数字,它们将被强制变成数字。如果没有指定domain,返回比例尺当前domain的副本。

尽管连续色阶在其域和范围内通常有两个值,但指定两个以上的值会产生一个分片色阶。

例如,要创建一个分歧色标,在负值的白色和红色之间插值,在正值的白色和绿色之间插值:

var color = d3.scaleLinear()    .domain([-1, 0, 1])    .range(["red", "white", "green"]);color(-0.5); // "rgb(255, 128, 128)"color(+0.5); // "rgb(128, 192, 128)"

在内部,分片比例尺对与给定域值对应的范围插值器进行二进制搜索。因此,域必须按升序或降序排列。如果域和范围有不同的长度N和M,则只会去取*min(N,M)*个元素进行展示。

continuous.range([range])

如果指定了range,则将比例尺的范围设置为指定的数值数组。该数组必须包含两个或更多的元素。与域不同,给定数组中的元素不需要是数字;底层插值器支持的任何值都可以工作,但注意数字范围对invert是必需的。如果没有指定范围,则返回刻度的当前范围的副本。参见continuous.interpolate获取更多的例子。

continuous.rangeRound([range])

将刻度尺的范围设置为指定的数值数组,同时将刻度尺的插值器设置为interpolateRound。 这是一个方便的方法,相当于:

continuous    .range(range)    .interpolate(d3.interpolateRound);

四舍五入插值器有时对避免抗锯齿伪影很有用,不过也可以考虑形状渲染的 "crispEdges "样式。注意,这个插值器只能用于数字范围。

continuous.clamp(clamp)

如果指定了clamp,则相应地启用或禁用clamp。如果clamping功能被禁用,并且比例尺被传递了一个domain之外的值,那么比例尺可能通过外推法返回一个域外的值。如果clamping功能被启用,刻度的返回值总是在刻度的范围内。

clamping常用于continuous.invert。例如:

var x = d3.scaleLinear()    .domain([10, 130])    .range([0, 960]);x(-10); // -160, outside rangex.invert(-160); // -10, outside domainx.clamp(true);x(-10); // 0, clamped to rangex.invert(-160); // 10, clamped to domain

continuous.unknown([value]

如果指定value,为未定义(或NaN)的输入值设置刻度的输出值,并返回这个刻度。如果没有指定value,返回当前的未知值,默认为未定义。

continuous.interpolate(interpolate)

如果指定了interpolate,则设置比例尺的范围插值器工厂。这个插值器工厂用于为范围中每一对相邻的值创建插值器;然后这些插值器将[0, 1]中的标准化域参数t映射到范围中的相应值。如果没有指定factory,则返回比例尺当前的插值器工厂,默认为d3.interpolate。参见d3-interpolate以了解更多的插值器。

例如,考虑一个有三种颜色范围的发散色标。

var color = d3.scaleLinear()    .domain([-100, 0, +100])    .range(["red", "white", "green"]);

在刻度内部创建两个插值器,相当于:

var i0 = d3.interpolate("red", "white"),    i1 = d3.interpolate("white", "green");

指定自定义插值器的一个常见原因是要改变插值的颜色空间。例如,要使用HCL。

var color = d3.scaleLinear()    .domain([10, 100])    .range(["brown", "steelblue"])    .interpolate(d3.interpolateHcl);

或者为Cubehelix提供一个自定义的伽玛。

var color = d3.scaleLinear()    .domain([10, 100])    .range(["brown", "steelblue"])    .interpolate(d3.interpolateCubehelix.gamma(3));

注意:默认的内插器可以重复使用返回值。例如,如果范围值是对象,那么值插值器总是返回相同的对象,在原地修改它。如果范围用于设置属性或样式,这通常是可以接受的(为了性能也是可取的);但是,如果你需要存储范围的返回值,你必须指定你自己的内插器或根据情况进行复制。

continuous.ticks([count])

返回比例尺domain中大约有多少个代表性的值。如果没有指定count,默认为10。返回的刻度值间隔均匀,具有人类可读的数值(比如10的倍数),并且保证在域的范围内。ticks通常与可视化的数据结合在一起,用来显示参考线,或tick标记。指定的count只是一个预估值;根据域的不同,刻度可能会返回更多或更少的值。参见d3-array的ticks。

continuous.tickFORMat([count[, specifier]])

返回一个适合显示tick值的数字格式函数,根据tick值之间的固定间隔自动计算适当的精度。指定的计数应与用于生成刻度值的计数相同。

一个可选的指定符允许自定义格式,其中格式的精度由刻度自动设置为适合刻度间隔。例如,为了格式化百分比变化,你可以写成:

var x = d3.scaleLinear()    .domain([-1, 1])    .range([0, 960]);var ticks = x.ticks(5),    tickFormat = x.tickFormat(5, "+%");ticks.map(tickFormat); // ["-100%", "-50%", "+0%", "+50%", "+100%"]

如果指定者使用了格式类型s,刻度将返回一个基于域中最大值的SI-前缀的格式。如果指定者已经指定了一个精度,这个方法就等同于locale.format。参见d3.tickFormat。

continuous.nice([count])

扩展域,使其开始和结束于漂亮的整数值。这个方法通常会修改刻度的域,并且只能将边界扩展到最近的整数值。一个可选的tick count参数允许对用于扩展边界的步长进行更大的控制,保证返回的tick将完全覆盖域。如果域是由数据计算出来的,比如说使用程度,并且可能是不规则的,那么Nicing就很有用。例如,对于一个[0.201479..., 0.996679...]的域,一个好的域可能是[0.2, 1.0]。如果域有两个以上的值,对域的划分只影响到第一个和最后一个值。也请参见d3-array的tickStep。

扩展一个比例尺只影响当前的域;它不会自动美化随后使用continuous.domain设置的域。如果需要的话,你必须在设置新域后重新对比例尺进行修饰。

continuous.copy()

返回该比例尺的精确拷贝。对这个比例尺的改变不会影响返回的比例尺,反之亦然。

d3.tickFormat(start, stop, count[, specifier])

返回一个适合显示tick值的数字格式函数,根据d3.tickStep确定的tick值之间的固定间隔,自动计算适当的精度。

一个可选的指定符允许自定义格式,其中格式的精度由刻度自动设置为适合刻度间隔。例如,为了格式化百分比变化,你可以写成:

var tickFormat = d3.tickFormat(-1, 1, 5, "+%");tickFormat(-0.5); // "-50%"

如果指定者使用格式类型s,刻度将返回一个基于start和stop的较大绝对值的SI-prefix格式。如果指定者已经指定了一个精度,这个方法就等同于locale.format。

time.ticks([interval]) time.ticks([count])

返回刻度域中的代表性日期。返回的刻度值是均匀间隔的(大部分),有合理的值(比如每天的午夜),并且保证在域的范围内。ticks通常与可视化的数据结合在一起,用来显示参考线,或tick标记。

可以指定一个可选的count,以影响生成多少个ticks。如果没有指定count,默认为10。指定的计数只是一个参考值;根据领域的不同,刻度可能返回更多或更少的值。例如,要创建10个默认的刻度线:

var x = d3.scaleTime();x.ticks(10);// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 03:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 06:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 09:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 12:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 15:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 18:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 21:00:00 GMT-0800 (PST),//  Sun Jan 02 2000 00:00:00 GMT-0800 (PST)]// 设置了10个 但只返回了9个

以下时间间隔被认为是默认的时间间隔:

  • 1-, 5-, 15- and 30-minute.

  • 1-, 3-, 6- and 12-hour.

  • 1- and 2-day.

  • 1-week.

  • 1- and 3-month.

  • 1-year.

为了代替计数,可以明确指定一个时间间隔。要修剪给定时间间隔生成的ticks,使用interval.every。

例如,制定15分钟的时间间隔生成ticks:

var x = d3.scaleTime()    .domain([new Date(2000, 0, 1, 0), new Date(2000, 0, 1, 2)]);x.ticks(d3.timeMinute.every(15));// [Sat Jan 01 2000 00:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 00:15:00 GMT-0800 (PST),//  Sat Jan 01 2000 00:30:00 GMT-0800 (PST),//  Sat Jan 01 2000 00:45:00 GMT-0800 (PST),//  Sat Jan 01 2000 01:00:00 GMT-0800 (PST),//  Sat Jan 01 2000 01:15:00 GMT-0800 (PST),//  Sat Jan 01 2000 01:30:00 GMT-0800 (PST),//  Sat Jan 01 2000 01:45:00 GMT-0800 (PST),//  Sat Jan 01 2000 02:00:00 GMT-0800 (PST)]

或者,向interval.filter传递一个取值函数:

x.ticks(d3.timeMinute.filter(function(d) {  return d.getMinutes() % 15 === 0;}));

注意:在某些情况下,比如说,对于日标,指定一个步骤会导致标点的不规则间隔,因为时间间隔有不同的长度。

time.tickFormat([count[, specifier]]) time.tickFormat([interval[, specifier]])

返回一个适合显示tick值的时间格式函数。指定的计数或时间间隔目前被忽略,但为了与其他尺度(如continuous.tickFormat)保持一致会被接受。如果指定了一个格式指定符,这个方法等同于format。如果没有指定指定器,将返回默认的时间格式。 默认的多尺度时间格式在指定的日期基础上选择一个人类可读的表示方法,如下:

  • %Y--代表年份界限,如2011年。

  • %B - 以月为界,如二月。

  • %b %d - 以周为界,如2月6日。

  • %a %d - 以日为界,如周一07。

  • %I %p - 以小时为界,如01 AM。

  • %I:%M - 以分钟为界限,如01:23。

  • :%S - 以秒为界限,如:45。

  • .%L--表示所有其他时间的毫秒数,如0.012。

虽然有些不寻常,但这种默认行为的好处是提供了本地和全局的背景:例如,将一串刻度线格式化为[11 PM, Mon 07, 01 AM],可以同时显示小时、日期和日期的信息,而不是只显示小时[11 PM, 12 AM, 01 AM]。如果你想推出你自己的条件性时间格式,请参见d3-Time-format。

time.nice([count]) time.nice([interval])

扩展域,使其开始和结束于漂亮的整数值。这个方法通常会修改刻度的域,并且可能只将边界扩展到最近的圆值。参见continuous.nice了解更多。

一个可选的刻度线参数允许对用于扩展边界的步长进行更大的控制,保证返回的刻度线将完全覆盖该域。另外,也可以指定一个时间间隔来明确地设置刻度。如果指定了一个时间间隔,也可以指定一个可选的步长,以跳过一些刻度。例如,time.nice(d3.timeSecond.every(10))将扩展域到偶数的10秒(0、10、20等)。更多细节见time.ticks和interval.every。

d3.scaleUtc([[domain, ]range])

相当于scaleTime,但返回的时间刻度是以协调世界时(UTC)而非本地时间运行的。

到此,关于“d3-scale和d3-scaleTime如何使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: d3-scale和d3-scaleTime如何使用

本文链接: https://www.lsjlt.com/news/351317.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • d3-scale和d3-scaleTime如何使用
    这篇文章主要介绍“d3-scale和d3-scaleTime如何使用”,在日常操作中,相信很多人在d3-scale和d3-scaleTime如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”d3-scal...
    99+
    2023-07-05
  • d3-scaled3-scaleTime使用示例详解
    目录安装使用APIcontinuous(value)continuous.invert(value)continuous.domain([domain])continuous.ran...
    99+
    2023-03-10
    d3-scale d3-scaleTime d3 scale使用
  • D3.js入门之D3 DataJoin的使用
    目录data、enter、exitdatumjoin最后DataJoin(数据连接)是D3中很重要的一个概念。上一章有提到D3是基于数据操作DOM的js库,DataJoin使我们能够...
    99+
    2022-11-13
    D3.js DataJoin使用 D3.js DataJoin D3 DataJoin
  • d3.js如何实现数据绑定
    这篇文章主要介绍了d3.js如何实现数据绑定,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言d3.js 是一款上手容易的js类库,专门用于...
    99+
    2024-04-02
  • 怎么用CSS和D3实现一组彩灯
    小编给大家分享一下怎么用CSS和D3实现一组彩灯,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   代码解读   定义dom...
    99+
    2024-04-02
  • 怎么使用CSS和D3实现一个舞动的画面
    小编给大家分享一下怎么使用CSS和D3实现一个舞动的画面,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   代码解读   定...
    99+
    2024-04-02
  • D3.js入门之比例尺的使用与绘制
    目录比例尺常用比例尺scaleLinear 线性比例尺scaleBand 有序序数比例尺d3.scaleTime() 时间比例尺scaleOrdinal 无序序数比例尺scalePo...
    99+
    2022-11-13
    D3.js比例尺使用 D3.js比例尺绘制 D3.js比例尺
  • D3.js中如何读取CSV表格文件
    这篇文章将为大家详细讲解有关D3.js中如何读取CSV表格文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. CSV 格式是什么CSV(Comma Separated...
    99+
    2024-04-02
  • 怎么使用CSS和D3实现黑白交叠的动画效果
    这篇文章将为大家详细讲解有关怎么使用CSS和D3实现黑白交叠的动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   代码解读   定义dom,容器中包含3个子元...
    99+
    2024-04-02
  • D3.js中强制异步文件如何读取同步
    这篇文章主要为大家展示了“D3.js中强制异步文件如何读取同步”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“D3.js中强制异步文件如何读取同步”这篇文章吧。发...
    99+
    2024-04-02
  • 怎么用CSS在线字体和D3实现Google的信息图
    这篇文章给大家分享的是有关怎么用CSS在线字体和D3实现Google的信息图的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   代码解读   定义dom,只有1个空元素,其中...
    99+
    2024-04-02
  • 怎么用CSS和D3实现小鱼游动的交互动画
    小编给大家分享一下怎么用CSS和D3实现小鱼游动的交互动画,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   代码解读   定义dom,容器中包含的子元素分别代表鱼的身体、眼睛、背鳍和...
    99+
    2024-04-02
  • CSS和D3怎么实现用文字组成的心形动画效果
    小编给大家分享一下CSS和D3怎么实现用文字组成的心形动画效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   代码解读 ...
    99+
    2024-04-02
  • 用VUE D3.js和Vue.js构建动态数据可视化应用:让数据栩栩如生
    VUE D3.js简介:一个用于创建数据可视化的强大库 VUE D3.js是一个用于创建数据可视化的强大库,它基于D3.js,并扩展了Vue.js的API。这意味着您可以使用Vue.js的组件系统和响应式编程模型来构建动态和交互式的数据...
    99+
    2024-02-27
    数据可视化、VUE D3.js、Vue.js、图表、交互式、动态
  • 利用VUE D3.js和Vue.js打造惊艳的数据可视化效果:让数据说话
    应用场景: 数据可视化在各个领域都有广泛的应用,包括但不限于: 商业分析: 通过将销售数据、客户行为数据等转化为可视化的图表,企业可以轻松发现销售趋势、客户行为模式等,从而做出更有效的决策。 金融分析: 金融分析师可以通过将复杂的金融数...
    99+
    2024-02-27
    Vue.js与D3.js的强强联合: Vue.js是一个流行的前端框架 凭借其丰富的组件生态和简洁的语法 受到许多开发者的青睐。D3.js是一个数据可视化库 可以轻松创建各种类型的图表。将Vue.j
  • css3的transform中scale缩放如何使用
    这篇文章主要讲解了“css3的transform中scale缩放如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“css3的transform中scal...
    99+
    2024-04-02
  • 微信小程序中如何调用scale方法
    这篇文章主要介绍“微信小程序中如何调用scale方法”,在日常操作中,相信很多人在微信小程序中如何调用scale方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序中如何调用scale方法”的疑惑有所...
    99+
    2023-06-26
  • 如何解决页面整体使用transform scale后地图点位点击偏移错位问题
    如何解决页面整体使用transform scale后地图点位点击偏移错位问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在可视化项目中使用 css3 trans...
    99+
    2023-06-26
  • 如何使用localStorage和sessionStorage
    这篇文章主要介绍了如何使用localStorage和sessionStorage,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、什么是lo...
    99+
    2024-04-02
  • Promise.race和Promise.any如何使用
    本文小编为大家详细介绍“Promise.race和Promise.any如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Promise.race和Promise.any如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作