D3篇之色卡

2024-01-08 19:04
文章标签 色卡 d3

本文主要是介绍D3篇之色卡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

学习传送门:Sequential scales | D3 by Observable

1.scaleSequential(domaininterpolator)(连续比例尺)

是一种在D3.js中用于将一个范围内的连续值射到另一个范围内的连续值的方法。该比例尺通常用于将数值型数据映射到图表元素的属性上,例如颜色、大小、透明度等。它通常会根据所提供的输入和输出范,生成一个可以将一个连续输入域映射到一个输出范围的函数,使用该函数对图表元素进行样式设置。

1.盒子容器

 <span id="color">颜色</span>

    <div id="colorRef" ref="colorRef" :class="$style.colorRef"></div>

2.设置顺序尺,这里我们采用的是连续比例尺 scaleSequential

const colorScale = d3.scaleSequential(d3.interpolateReds).domain([0, 100]);d3.select('#colorRef').style('background', `linear-gradient(to right, ${colorScale(0)}, ${colorScale(100)})`).on('click', function (event, d) {// 获取点击位置的X坐标const clickX = d3.pointer(event)[0];// 获取容器的宽度const containerWidth = this.clientWidth;// 计算点击位置所对应的比例值(0 到 1)const clickedRatio = clickX / containerWidth;// 根据比例值和域范围获取对应的数据值const dataValue = clickedRatio * (colorScale.domain()[1] - colorScale.domain()[0]) + colorScale.domain()[0];// 在控制台打印点击位置所对应的数据值document.getElementById('color').style.color = colorScale(dataValue);});

d3-scale-chromaticicon-default.png?t=N7T8https://d3js.org/d3-scale-chromatic

这块主要是d3提供的一些颜色范围, 更改代码里面的d3.interpolateReds可看到不同颜色的卡尺

注意:与下面scaleOrdinal不同的是顺序比例尺的range是用于限制颜色范围,比如说将上面的红色限制范围在2个红色之间;添加了range,最终呈现会以range为主

colorScale.range([d3.rgb(255, 240, 240), d3.rgb(165, 0, 38)]); // 设置输出范围为两种红色的渐变

const colorScale = d3

        .scaleSequential(d3.interpolateBlues)

        .domain([0, 100])

        .range([d3.rgb(255, 240, 240), d3.rgb(165, 0, 38)]);

这段代码显示的颜色,是以range为主的红色

1-2.彩虹颜色比例尺 

在测试颜色的时候,我发现d3.interpolateRainbow使用上面的scaleSequential用起来有点不符合我想要的const color = d3.scaleSequential(d3.interpolateRainbow).domain([0,100]);展示界面并不是彩虹色

是因为彩虹色(Rainbow)并不是线性分布的颜色。因此,在使用彩虹色的连续比例尺时,不适合直接将颜色线性地映射到 linear-gradient 中。彩虹色在颜色空间上的分布并不是简单的线性或均匀的。所以这我们采用svg绘制渐变色带

 // 创建一个更广泛的连续彩虹色比例尺const rainbowScale = d3.scaleSequential(d3.interpolateRainbow).domain([-100, 100]); // 更广泛的数据范围const numSteps = 100;const svg = d3.select('#colorRef').append('svg').attr('width', 300).attr('height', 30);const gradient = svg.append('defs').append('linearGradient').attr('id', 'gradient').attr('x1', '0%').attr('x2', '100%').attr('spreadMethod', 'pad');for (let i = 0; i <= numSteps; i++) {gradient.append('stop').attr('offset', i / numSteps).attr('stop-color', rainbowScale(i * (200 / numSteps) - 100));}svg.append('rect').attr('x', 0).attr('y', 0).attr('width', 300).attr('height', 30).style('fill', 'url(#gradient)');

2.scaleOrdinal(domain,range)  (序数比例尺)用于将一组离散的值映射到一组有限的输出值的方法

该比例尺通常用于将类别(如颜色、图案等)映射到图表元素(如点、线条、柱状图等)的属性(如颜色、样式等)上。例如,可以使用Ordinal将一组设备类型(如手机、平板电脑、笔记本电等)映射到一组颜色(如红色、绿色、蓝色等)以区分它们在一个图表中的区别。

  const color = d3.scaleOrdinal().domain(cityData).range(d3.schemeBlues[9]);

上面写法等同于:const color = d3.scaleOrdinal(d3.schemeBlues[9]).domain(cityData);

等同于:const color = d3.scaleOrdinal(cityData,d3.schemeBlues[9]);

d3.select('#colorRef').selectAll('.color-block').data(cityData).enter().append('div').attr('class', 'color-block').style('background-color', d => color(d)).on('click', function (event, d) {// 在这里可以添加点击颜色块时的交互逻辑console.log('Selected color:', d);});

这里需要加一个css样式:

 .colorRef {

    width: 400px;

    height: 100px;

    border: 1px solid pink;

    box-sizing: border-box;

    display: flex;

        

.color-block {

  flex: 1;

}

  }

以上大致是d3对于色卡的基本使用,具体可参照官网自行测试 

这篇关于D3篇之色卡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584491

相关文章

智能电力监控与管理系统:基于MQTT协议的实时数据传输,结合React和D3.js实现数据可视化,利用TensorFlow进行故障检测与能效优化(代码示例)

一、项目概述 智能电力监控与管理系统旨在通过高效的传感器网络和物联网技术,实现对电力系统的实时监控和智能管理。该项目的目标是提高电力设备的运行效率,降低能耗,并通过数据分析及时发现潜在故障,确保电力系统的安全和稳定。 项目解决的问题和带来的价值 实时监控:通过高精度传感器实时采集电流、温度和湿度等数据,确保及时发现设备异常。 数据分析:利用大数据技术对采集的数据进行深度分析,帮助用户优化

【D3.js in Action 3 精译】关于本书

文章目录 本书读者本书结构与路线图本书代码liveBook 在线论坛 D3.js 项目的传统开发步骤 本书读者 这本书适用于所有渴望在数据可视化工作中获得完全创意自由的人,从定制化的经典图表到创建独特的数据可视化布局,涵盖内容广泛,应有尽有。您可能拥有数据分析的相关背景,也可能是记者、设计师,甚至是数据可视化的发烧友。恭喜您考虑学习 D3.js !您很快就

【D3.js in Action 3 精译】前言

早在 2017 年,我还是一名渴望迈出职业生涯关键一步的前端开发者。虽然我很热衷于网站开发,但总感觉缺了点什么。我一直希望自己的工程专业背景和对教学的热爱能与新的编程技能相结合。就在这时,搭档建议我学学数据可视化。出于某种原因,他确信我会乐于探索这一蓬勃发展的领域。当我在谷歌上检索关键词“数据可视化”时,我偶然发现了纳迪埃·布雷默(Nadieh Bremer)和雪莉·吴(Shirley Wu)的“

d3.js获取流程图不同的节点

在D3.js中,获取流程图中不同的节点通常是通过选择SVG元素并使用数据绑定来实现的。流程图的节点可以通过BPMN、JSON或其他数据格式定义,然后在D3.js中根据这些数据动态生成和选择节点。 以下是一个基本的示例,展示如何使用D3.js选择和操作流程图中的不同节点: 步骤1: 准备数据 首先,你需要有一个包含流程图节点的数据集。这些数据可以是任何格式,但最常见的是JSON或BPMN。这里

【译】Learn D3 入门文档:Further Topics

引子 继 Learn D3: Interaction 最后一篇。 原文:Learn D3: Further Topics 版本:Published Mar 24, 2020 Origin My GitHub 正文 如果你从一开始就坚持这个教程,深呼吸,鼓励一下自己!🙌 你已经涵盖了很多领域,并对典型的可视化有了重要的了解。 但我们还没有到达顶峰!不,这只是大本营。 是时候向

【译】Learn D3 入门文档:Interaction

引子 继 Learn D3: Joins 第八篇,只是英文翻译,可修改代码的部分用静态图片替代了,想要实时交互请阅读原文。 原文:Learn D3: Interaction 版本:Published Mar 24, 2020 Origin My GitHub 正文 几乎总是有太多的信息无法合理地“容纳”在图表中。因此,设计不仅仅是决定如何展示某些东西,而是根据我们认为对想象中的读

【译】Learn D3 入门文档:Joins

引子 继 Learn D3: Animation 第七篇,只是英文翻译,可修改代码的部分用静态图片替代了,想要实时交互请阅读原文。 原文:Learn D3: Joins 版本:Published Mar 24, 2020 Origin My GitHub 正文 如果你熟悉此教程中的 D3 ,你可能会惊讶于 D3 选择器被提及的如此之少。 那是因为你可能不需要它们! D3 选择

【译】Learn D3 入门文档:Animation

引子 继 Learn D3: Shapes 第六篇,只是英文翻译,可修改代码的部分用静态图片替代了,想要实时交互请阅读原文。 原文:Learn D3: Animation 版本:Published Mar 24, 2020 Origin My GitHub 正文 与在纸上绘制的图形不同,计算机图形不必是静态的;就像弗兰肯斯坦的怪物一样,他们可以通过动画活过来!✨ 上面的折线

Learn D3 入门文档:Shapes

引子 继 Learn D3: Scales 第五篇,只是英文翻译,可修改代码的部分用静态图片替代了,想要实时交互请阅读原文。 原文:Learn D3: Shapes 版本:Published Mar 24, 2020 Origin My GitHub 正文 SVG 和 Canvas 允许任何类型的图形是有意通用的;相比之下,D3 用于可视化,因此提供了专门的形状词汇,这些形状是生

【译】Learn D3 入门文档:Scales

引子 继 Learn D3: Data 第四篇,只是英文翻译,可修改代码的部分用静态图片替代了,想要实时交互请阅读原文。 原文:Learn D3: Scales 版本:Published Mar 24, 2020 Origin My GitHub 正文 在 D3 数据图形所有工具中,最基本的是比例尺,它将数据的抽象维度映射到可视变量。 为了尝试,看看这些小(但美味!)水果的数据