d3.js - d3当长度不同时如何在数字到颜色之间缩放
问题描述
d3.scaleOrdinal
当域和范围长度不同时如何使用?
我有这个颜色数组:
const color = [ 'red', 'green', 'blue' ];
当我想将数字缩放到它时,当我有 3 个数字时很容易
scaleOrdinal().domain([1,2,3]).range(color)
但是如果我有 10 个号码,我该怎么办?我希望数字 1、2、3 将变为红色,4、5、6 将变为绿色,而 7、8、9 将变为蓝色。
我怎样才能做到这一点?我正在使用d3
v4
解决方案
写下你自己的比例:
const color = [ 'red', 'green', 'blue' ];
var colorScale = d3.scaleOrdinal().domain(d3.range(1,11)).range(color);
function ordinalGroup(ordinalBase) {
return function(v) {
var domain = ordinalBase.domain();
var range = ordinalBase.range();
var idx = domain.indexOf(v);
if (idx === -1) return range[0];
return range[Math.floor(idx/(domain.length/range.length))];
};
}
var colorGroup = ordinalGroup(colorScale);
console.log(colorScale.domain().map(d => [d, colorGroup(d)] ));
<script src="https://d3js.org/d3.v4.min.js"></script>
推荐阅读
- python - TypeError:“ID3TimeStamp”类型的对象没有 len()
- c# - Unity:碰撞后改变 RigidBody2D 的速度会导致游戏崩溃,无论平台如何,包括在编辑器中
- google-apps-script - 如何获取 Mimetype 文件 ID
- sql - 查找名为 SQL_ID 的 PL/SQL 包
- salesforce - 使用 C# REST API 在 Salesforce 中截断表
- r - dplyr 改变分组数据而不使用确切的列名
- mongodb - Mongodb 没有启动
- java - 如何从android中的另一个片段调用片段方法
- c# - 如何将 2DPoints 列表挤出到网格中并在 C# 中减去这些挤出?[构造立体几何]
- excel - 有没有办法根据单元格选择数据透视表的行和列?