如何让单一颜色获得不同深浅的颜色?

Rom*_*kyi 4 d3.js

如何使用 d3.js 获得单色的不同深浅颜色?

例如:

colorScale('myId') => 'red'colorScale(red)(10)=> dark red& colorScale(red)(1)=> light red

Ger*_*ado 5

鉴于您对所需结果的描述,我非常怀疑您是否想要色调:从技术上讲,色调是给定颜色与黑色的混合物,降低了其亮度。

因此,假设您确实想要shades"red" ,则可以使用从到"black"[0, 40]用作域的简单线性比例来完成该任务(此处使用 D3 v5.8 新构造函数):

const scale = d3.scaleLinear([0,40], ["red", "black"])
Run Code Online (Sandbox Code Playgroud)

如果您想更改某些值(如伽玛),您还可以设置插值器:

const scale = d3.scaleLinear([0,40], ["red", "black"])
    .interpolate(d3.interpolateRgb.gamma(1.9));
Run Code Online (Sandbox Code Playgroud)

这是演示:

const scale = d3.scaleLinear([0,40], ["red", "black"])
Run Code Online (Sandbox Code Playgroud)
const scale = d3.scaleLinear([0,40], ["red", "black"])
    .interpolate(d3.interpolateRgb.gamma(1.9));
Run Code Online (Sandbox Code Playgroud)
const scale = d3.scaleLinear([0, 40], ["red", "black"])
  .interpolate(d3.interpolateRgb.gamma(1.9));
d3.select("body").selectAll(null)
  .data(d3.range(41))
  .enter()
  .append("div")
  .style("background-color", d => scale(d))
Run Code Online (Sandbox Code Playgroud)

通过在域中使用更多不同的值,我们可以创建带有阴影的渐变(这只是一个演示,不要附加 500 个 div 来创建渐变!):

div {
  display: inline-block;
  width: 12px;
  height: 12px;
  margin-right: 2px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://d3js.org/d3.v5.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
const scale = d3.scaleLinear([0, 500], ["red", "black"])
  .interpolate(d3.interpolateRgb.gamma(1.9));
d3.select("body").selectAll(null)
  .data(d3.range(501))
  .enter()
  .append("div")
  .style("background-color", d => scale(d))
Run Code Online (Sandbox Code Playgroud)