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对于色卡的基本使用,具体可参照官网自行测试 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jenkins忘记密码后的操作

1、先停止 jenkins 服务 systemctl stop jenkins 关闭Jenkins服务 或者杀掉进程 ps -ef | grep jenkins &#xff5c;awk {print $2} | grep -v "grep" | xargs kill -9 2、找到 config.xml 文件 find /root -name config.xml3、备份config.xml文件 cp /root/.jen…

Java面试——框架篇

1、Spring框架中的单例bean是线程安全的吗&#xff1f; 所谓单例就是所有的请求都用一个对象来处理&#xff0c;而多例则指每个请求用一个新的对象来处理。 结论&#xff1a;线程不安全。 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。一…

【STM32】STM32学习笔记-USART串口外设(26)

00. 目录 文章目录 00. 目录01. 串口简介02. 串口协议03. USART简介04. USART框图05. USART基本结构06. 数据帧07. 起始位侦测08. 数据采样09. 波特率发生器10. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式&#xff0c;因为它简单便…

基于FPGA的RLC测试仪

1. 系统设计 以FPGA为控制器&#xff0c;实现RLC(电阻、电容、电感)的检测&#xff0c;其测量电路如下&#xff1a;

性能优化-OpenMP基础教程(四)-Android上运行OpenMP

本文主要介绍如何在一个常规的Android手机上调试OpenMP程序&#xff0c;包括Android NDK的环境配置和使用JNI编写一个OpenMP程序运行在Android手机中。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#…

2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

微服务彻底改变了应用程序开发世界&#xff0c;将大型整体系统分解为更小、更易于管理的组件。这种架构风格的特点是独立、松散耦合的服务&#xff0c;带来了从可扩展性、模块化到更高的灵活性等众多优势。 DevOps 团队如何最好地利用这种方法来实现最高效率&#xff1f;答案在…

vue中短时间内多次点击同一个按钮会向后端发送多个请求

在vue中&#xff0c;我们可能会遇到以下问题&#xff1a; 我们有两种方法解决&#xff1a; &#xff08;1&#xff09;可以通过设置一个标志位来防止用户在短时间内多次点击同一个按钮导致向后端发送多个请求。具体实现方式如下&#xff1a; 定义一个 isFetching变量来表示当…

欧盟食品接触材料测试1935/2004/EC介绍

欧盟官方公报(OJ)发布与食品接触的塑料制品法规(EU)10/2011的修订法规(EU)2017/752。欧盟食品级塑料法规从(EU)10/2011发布以来&#xff0c;已历经7次修订&#xff0c;前5次的修订版本均是针对EU10/2011法规里的附录1授权物质清单进行修订。第6次修订法规(EU)2016/1416澄清和纠…

寻找两个相交链表的相交节点

分析&#xff1a; 如图所示&#xff0c; A 长度为mkB长度为nk张三&#xff0c;李四两人分别从A和B的起始点相同速度出发&#xff0c;无论谁到达终点时&#xff0c;都从另一条队列的起点再次出发。假定起始&#xff0c;张三沿着A走&#xff0c;李四沿着B走。当李四到达终点后&a…

thinkadmin列表多图点击放大

头像展示 原型 {field: images, title: 图片, align: center, minWidth: 200,

云原生技术专题 | 解密2023年云原生的安全优化升级,告别高危漏洞、与数据泄露说“再见”(安全管控篇)

背景介绍 2023年&#xff0c;我们见证了科技领域的蓬勃发展&#xff0c;每一次技术革新都为我们带来了广阔的发展前景。作为后端开发者&#xff0c;我们深受其影响&#xff0c;不断迈向未来。 随着数字化浪潮的席卷&#xff0c;各种架构设计理念相互交汇&#xff0c;共同塑造了…

73应急响应-Web分析phpjavaWeb自动化工具

我感觉学完渗透自然就会应急响应&#xff0c;之前又发过应急响应的文章 应急响应笔记就开始比较潦草 应急响应基础知识 应急响应流程 保护阶段&#xff08;断网&#xff0c;避免继续渗透&#xff1b;备份&#xff09;&#xff0c;分析阶段&#xff08;分析攻击行为&#xf…

二 数据查询

1、实验目的 理解SQL成熟设计基本规范&#xff0c;熟练运用SQL语言实现数据基本查询&#xff0c;包括但表查询、分组统计查询和连接查询。 2、实验内容及要求 针对数据库设计各种单表查询SQL语句、分组统计查询语句&#xff1b;设计单个表针对自身的连接查询&#xff0c;设计…

WiFi6工业网关能为工业物联网带来哪些改进?

WiFi 6&#xff08; 802.11ax&#xff09;比其前身WiFi 5&#xff08;802.11ac&#xff09;带来了多项改进&#xff0c;例如更快的通信速率、更大的带宽容量、在多设备连入时更稳定的性能、更大的链接范围、增强的安全性以及更好地支持物联网工作负载等&#xff0c;本篇就为大家…

国标GB28181视频监控EasyCVR平台:视频集中录制存储/云端录像功能及操作介绍

安防视频监控系统EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;同时还具备权限管理、设…

C++ 软件常用分析工具及项目实战问题分析案例集锦

目录 1、库依赖关系查看工具Dependency Walker 2、GDI对象查看工具GDIview 3、PE信息查看工具PeViewer/MiTeC EXE Explorer 4、进程信息查看工具Process Explorer 5、进程监控工具Process Monitor 6、API函数调用监测工具API Monitor C软件异常排查从入门到精通系列教程&…

目标检测-One Stage-CenterNet

文章目录 前言一、CenterNet的网络结构和流程二、CenterNet的创新点总结 前言 前文提到的YOLOv3、YOLOv4、YOLOv5都是基于Anchor的算法&#xff08;anchor-based&#xff09;&#xff0c;这类算法有如下缺点&#xff1a; 产生大量的预测框&#xff0c;计算量大正负样本不平衡…

信息系统安全——基于 KALI 和 Metasploit 的渗透测试

实验 2 基于 KALI 和 Metasploit 的渗透测试 2.1 实验名称 《基于 KALI 和 Metasploit 的渗透测试》 2.2 实验目的 1 、熟悉渗透测试方法 2 、熟悉渗透测试工具 Kali 及 Metasploit 的使用 2.3 实验步骤及内容 1 、安装 Kali 系统 2 、选择 Kali 中 1-2 种攻击工具&#xff0c…

React入门 - 02(工程目录结构解析)

本章内容 目录 1 外层“文件”说明2 各个“文件夹”说明 接着上一节的内容&#xff0c;我们继续这一节的内容–工程目录文件解析。打开上一节已经建好的工程 react-demo,详细的来了解一些里面的文件。 1 外层“文件”说明 .gitignore — 当我们使用 git 的时候&#xff0c;希…

seata专题

什么是seata Seata是一个开源的分布式事务解决方案&#xff0c;旨在简化分布式事务的实现。它提供了一种简单而强大的方式来管理分布式事务&#xff0c;在分布式应用程序中保持数据的一致性和可靠性。 在传统的单体应用程序中&#xff0c;数据库事务可以很容易地实现。但是…