d3.nice(start, stop, 1) returns [-1e308, 1e308] when the interval contains zero, so d3.bin gives NaN bin bounds

Ouverte Adaptée aux débutants
#292 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@awais-ur-rehman y travaille déjà.

Depuis le 7/11/2026.

  • #293 par @awais-ur-rehman — ouverte
  • #299 par @Fil — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
78/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
javascript, node.js
Domaine
data

Piste de recherche

Commence par src/nice.js, où l’issue identifie la boucle qui élargit l’intervalle de façon répétée, et suis l’évolution du pas des graduations lorsque le nombre demandé est 1 et que l’intervalle traverse zéro. Reproduis les exemples avec node et examine les tests existants pour nice et bin. Le travail est terminé lorsque d3.nice renvoie un intervalle fini couvrant l’entrée et que les bornes des bins signalées sont finies.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

With count 1 and start < 0 < stop, d3.nice keeps widening the interval until the step overflows. d3.bin hits this through thresholds(1) or when thresholdScott / thresholdFreedmanDiaconis return 1, and the bins get NaN bounds.

import * as d3 from "d3-array";

console.log(d3.nice(-1, 5, 1));
console.log(d3.nice(-0.1, 0.2, 1));
console.log(d3.thresholdScott([-1, 5], -1, 5));
console.log(d3.bin().thresholds(d3.thresholdScott)([-1, 5]));
console.log(d3.bin().thresholds(1)([-1.4, 5.6]));

node t.mjs

Actual:

[ -1e+308, 1e+308 ]
[ -1e+308, 1e+308 ]
1
[ [ -1, 5, x0: -1e+308, x1: NaN ], [ x0: NaN, x1: 1e+308 ] ]
[ [ -1.4, 5.6, x0: -1e+308, x1: NaN ], [ x0: NaN, x1: 1e+308 ] ]

Expected: a finite nice interval covering the input (for example [-10, 10] for d3.nice(-1, 5, 1)), and bins with finite x0 and x1.

Tested with d3-array 3.2.5 from npm and main at 24c015e, Node.js 26.13.0.

The loop in src/nice.js stops only when tickIncrement returns the previous step (or a non-finite one). With count 1 across zero, rounding both ends outward always gives an interval of at least two steps, so every iteration picks the next larger step ([-1, 5] to [-5, 5] to [-10, 10] ...). Stopping when the step grows past the previous one, or capping the iterations as d3-scale's linear.nice does, would end it.

Credit: https://ucsbplse.github.io/

Langage dominant
JavaScript
Étoiles
465
Forks
193
Merge moyen
5 h 46 min
PR mergées (30 j)
1

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de d3/d3-array

Toutes les issues de d3/d3-array

Issues similaires

Plus d'issues JavaScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.