Я сталкиваюсь с неожиданным поведением при использовании d3.scale.category10() для генерации 10 фиксированных цветов.
Запустив, я отмечаю, что colors.range() возвращает массив правильно упорядоченных цветов в соответствии с документацией.
var colors = d3.scale.category10();
console.log(colors.range());
// -> ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"]
Мое ожидание заключается в том, что вызывающие цвета (0) всегда возвращают нулевой элемент, цвета (1) первый и т.д. Однако то, что я наблюдаю, состоит в том, что если я сначала вызываю цвета (1), нулевой элемент возвращается вместо первого с этой точки вперед. Впоследствии вызывающие цвета (0) вернут первый элемент вместо нулевого. Таким образом, кажется, что возвращаемое значение привязано к порядку, в котором используются индексы, вместо естественного порядка.
Здесь сценарий: http://jsfiddle.net/LqHst/
Чтобы обойти это, я просто перехожу через цикл, чтобы коснуться всех цветов в правильном порядке.
for(var i = 0; i < 10; i++) {
colors(i);
}
Либо я не понимаю, как это должно работать, либо я не вижу смысла в неправильном использовании. Я использовал эту функцию раньше и помню, как встречал ожидаемое поведение, поэтому я думаю, что я просто делаю что-то неправильно или делаю неправильное предположение.