2013-12-02 2 views
0

Я использую D3.js RadarChart на основе этого примера: https://github.com/alangrafu/radar-chart-d3.Использование 1 минимального значения для радарной диаграммы

Проблема в том, что мои данные имеют минимальное значение 1, поэтому я хотел бы иметь значение 1 в середине радара. Но сценарий предполагает, что минимальное значение равно 0.

Есть ли способ изменить это? Спасибо за помощь.

+0

Похоже, что это будет довольно существенное изменение - минимальное значение никогда не установлено явно, но 0 предполагается в коде. –

ответ

1

Это немного хакерский, но может быть проще изменить ваши входные данные. Из example page:

d = [ 
    [ 
      {axis: "strength", value: 13}, 
      {axis: "intelligence", value: 1}, 
      {axis: "charisma", value: 8}, 
      {axis: "dexterity", value: 4}, 
      {axis: "luck", value: 9} 
      ],[ 
      {axis: "strength", value: 3}, 
      {axis: "intelligence", value: 15}, 
      {axis: "charisma", value: 4}, 
      {axis: "dexterity", value: 1}, 
      {axis: "luck", value: 15} 
      ],[ 
      {axis: "strength", value: 5}, 
      {axis: "intelligence", value: 1}, 
      {axis: "charisma", value: 16}, 
      {axis: "dexterity", value: 10}, 
      {axis: "luck", value: 5} 
    ] 
]; 

Для того, чтобы начать участок на 1 вместо 0, просто вычесть 1:

d.forEach(function(shape){ 
    shape.forEach(function(attribute){ 
    attribute.value = attribute.value - 1; 
    }); 
}); 

Чтобы сделать это правильно, вам необходимо изменить source of the library.

Создать шкалу:

var scale = d3.scale.linear().domain([cfg.minValue, cfg.maxValue]) 

, которая отображает значения на [0, 1]. Затем замените все экземпляры

parseFloat(Math.max(j.value, 0))/cfg.maxValue 

с

scale(parseFloat(Math.max(j.value, 0))) 
+0

Спасибо Адаму. Я изменил библиотеку (так как я изменил ее, чтобы отобразить легенду), и она отлично работает с вашими настройками. Кроме того, это помогло мне лучше понять D3. Благодаря! – lorenz

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