2
votes

Comment obtenir différentes nuances de couleurs pour une seule couleur?

Comment puis-je obtenir différentes nuances de couleur pour une seule couleur en utilisant d3.js?

Par exemple:

colorScale ('myId') => 'red' et colorScale (red) (10) => rouge foncé & colorScale (red) (1) => rouge clair .


0 commentaires

3 Réponses :


2
votes

Utilisez d3.rgb.brighter (k) ou d3.rgb.darker (k) depuis documentation d3 .

Comme ceci: let red = d3.rgb ("red") , qui donne au rouge la valeur rgb de la représentation d3 du rouge (r = 255). Ensuite, red.darker (0.5) donne un rouge plus foncé (r = 213):

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
let red = d3.rgb("red");
let darker = red.darker(0.5);
console.log(darker.toString())

Remarque: les couleurs plus claires et plus foncées peuvent être appliquées à d'autres types de couleurs (hsl, rgba, ...)

p>


1 commentaires

J'ai créé une démo en cours d'exécution, ce qui est toujours bon, j'espère que cela ne vous dérange pas.



3
votes

Compte tenu de votre description du résultat souhaité, je doute fort que vous souhaitiez des nuances : techniquement, les nuances sont des mélanges d'une couleur donnée avec du noir , réduisant sa légèreté.

Donc, en supposant que vous vouliez vraiment des nuances , la tâche peut être effectuée avec une simple échelle linéaire allant de "rouge" à "noir" code> et en utilisant [0, 40] comme domaine (ici en utilisant le nouveau constructeur D3 v5.8):

<script src="https://d3js.org/d3.v5.min.js"></script>

Vous pouvez également définir un interpolateur si vous souhaitez modifier certaines valeurs, comme le gamma:

div {
  display: inline-block;
  width: 1px;
  height: 40px;
}

Voici la démo:

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))
<script src="https://d3js.org/d3.v5.min.js"></script>
div {
  display: inline-block;
  width: 12px;
  height: 12px;
  margin-right: 2px;
}

En utilisant plus de valeurs différentes dans le domaine, nous pouvons créer un dégradé avec les nuances (ce n'est qu'une démo, n'ajoutez pas 500 divs pour créer un dégradé!):

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))
const scale = d3.scaleLinear([0,40], ["red", "black"])
    .interpolate(d3.interpolateRgb.gamma(1.9));
const scale = d3.scaleLinear([0,40], ["red", "black"])


0 commentaires

0
votes

Le commentaire principal fonctionne parfaitement, mais si quelqu'un utilise d3 v3, cela fonctionnera également.

var colors = d3.scale.linear().domain([0, 3]).range(["yellow", "red"]);
colors(0); // Yellow
colors(3); // Red


0 commentaires