gpt4 book ai didi

d3.js - D3:创建一个连续的色标,其中包含用于范围的许多字符串/输入并动态更改域的值

转载 作者:行者123 更新时间:2023-12-03 12:35:05 25 4
gpt4 key购买 nike

我正在尝试为热图创建线性色标。我想对色标进行大范围的特定颜色设置,其中第一种颜色对应于数据的最小值,而最后一种颜色应对应于数据的最大值。

我知道我可以通过在最小和最大值之间给域17值来做到这一点,但是如果用户能够更改数据集(从而更改热图的颜色),我不知道如何动态地执行此操作

本质上,我想关注,但是我知道它不起作用

var colorScale = d3.scale.linear()
.range(["#6363FF", "#6373FF", "#63A3FF", "#63E3FF", "#63FFFB", "#63FFCB",
"#63FF9B", "#63FF6B", "#7BFF63", "#BBFF63", "#DBFF63", "#FBFF63",
"#FFD363", "#FFB363", "#FF8363", "#FF7363", "#FF6364"])
.domain([d3.min(dataset, function(d) {return d;}),
d3.max(dataset, function(d) {return d;})]);

谁能告诉我我需要放入“域”以使其正常工作吗?

编辑:
我确实找到了可以满足我需求的东西。使用R,我使用designer.colors函数从上面计算了17种颜色之间的256种颜色,并将其放入范围内。这确实给人以连续的色阶的感觉
var colorScale = d3.scale.linear()
.range(["#6363FF", "#6364FF", "#6364FF", "#6365FF",
"... several other lines with color codes ..."
"#FF6764", "#FF6564", "#FF6464", "#FF6364"])
.domain(d3.range(1,257));

var quantize = d3.scale.quantile()
.range(d3.range(1,257))
.domain([d3.min(dataset, function(d) {return d;}),
d3.max(dataset, function(d) {return d;})]);

现在我可以用这种方式使用颜色
colorScale(quantize(dataset))

但是我想知道是否也可以用更少的代码行来完成?

最佳答案

您想分解问题。首先为您的热图定义一个比例,将0-1映射到您的颜色。然后定义第二个(动态)比例,将您的数据集映射到0-1。然后,您可以组合比例尺以绘制形状。

var colours = ["#6363FF", "#6373FF", "#63A3FF", "#63E3FF", "#63FFFB", "#63FFCB",
"#63FF9B", "#63FF6B", "#7BFF63", "#BBFF63", "#DBFF63", "#FBFF63",
"#FFD363", "#FFB363", "#FF8363", "#FF7363", "#FF6364"];

var heatmapColour = d3.scale.linear()
.domain(d3.range(0, 1, 1.0 / (colours.length - 1)))
.range(colours);

// dynamic bit...
var c = d3.scale.linear().domain(d3.extent(dataset)).range([0,1]);

// use the heatmap to fill in a canvas or whatever you want to do...
canvas.append("svg:rect")
.data(dataset)
.enter()
// snip...
.style("fill", function(d) {
return heatmapColour(c(d));

另外,您可以使用d3.extent函数一次性获取数据集的最小值和最大值。

关于d3.js - D3:创建一个连续的色标,其中包含用于范围的许多字符串/输入并动态更改域的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17671252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com