2015-05-03 2 views
1

Я использую d3js и загружаю некоторые данные из файла tsv. Для числовых данных я устанавливаю весы следующим образом:Установить домен в порядковой шкале из данных tsv

var x=d3.scale.linear() 
     .domain([d3.min(data,function(d){return + d.GERD;}),d3.max(data,function(d){return +d.GERD;})]) 
     ... 

Которые находят минимальные и максимальные значения в реальных данных. Таким образом, мне не нужно угадывать свои масштабы, и если данные меняются, масштаб меняется.

Я хочу то же самое для нечисловых значений.

В этих же данных есть группа «Континент», для которой я хочу использовать код цвета. Поэтому я использую category10 порядковую шкалу, например:

var colorRamp=d3.scale.category10() 
       .domain(["Africa","Asia"....]); 

Все примеры, которые я нахожу в Интернете показать домен для порядковых шкал создаются с конкретными значениями, а не как вытащить эту информацию из данных.

я возился и придумал это, который работает:

var colorRamp=d3.scale.category10() 
     .domain(data.map(function (d) { return d.continent; })) 

Мой вопрос, является ли это лучший способ сделать это? Есть ли что-то более d3-идиоматическое? Упускаю ли я что-то совершенно очевидное?

+0

Это способ сделать это. –

ответ

2

Вообще, если вы хотите определить порядковую шкалу, вы создаете массив из данных, которые вы имеете, так же, как вы предложили:

var colorRamp = d3.scale.category10() 
    .domain(data.map(function (d) { return d.continent; })); 

В вашем случае, если вы не уверены в том порядке, ваших данных также может быть полезным для сортировки домен:

var colorRamp = d3.scale.category10() 
    .domain(data.map(function (d) { return d.continent; }).sort(d3.ascending)); 

Обратите внимание, что вы технически не нужно, чтобы установить домен на порядковой шкале; если вы явно задали диапазон данных, которые домен выводит из каждого уникального значения, переданного функции масштабирования [1].

[1] D3 Ordinal Scales

+0

Спасибо. Я заметил, что это было назначено, когда я передал данные. Но я пытался создать легенду и обнаружил, что это не сработало, если я поставил код перед графикой. Я понял, что будут времена, когда я хочу явно назначить домен - так что хорошо иметь в сумке трюков. – Rothrock

Смежные вопросы