2015-07-24 4 views
0

Я пытаюсь отобразить показатели, которые не имеют никакого отношения друг к другу, поэтому вместо того, чтобы выводить фактические значения, я рассчитывается альтернативный набор значений, которые масштабируются между 0-1, как процент.Пропустить параметр to c3js tooltop после .generate() и before .load()

Например: [1, 2, 5] => [0.2, 0.4, 1]

Так что теперь у меня есть 2 набора данных - оригинальные и масштабируемые версии. У меня масштабированная версия, построенная на моем графике, прекрасна, но я хочу, чтобы всплывающая подсказка отображала значение оригинала. Смотрите, что я имею в виду?

Я проверил http://c3js.org/samples/tooltip_format.html, в котором показано, что вы можете установить всплывающую подсказку как функцию, когда вы первоначально генерируете объект C3. Но я хочу изменить подсказку позже, после того как я пересчитаю свои исходные/масштабированные значения и сделаю график.

Все попытки, которые я сделал для явного изменения myGraph.tooltip.format.value = function (...) {...} после первоначальной установки myGraph = C3.generate({...}), были неудачными.

Любые идеи, как я могу это сделать без необходимости регенерировать график с нуля каждый раз?

ответ

2

Вам необходимо переопределить internal.getTooltipContent

var data = ['data1', 30000, 20000, 10000, 40000, 15000, 250000]; 

// simple fake data 
var fakeData = data.map(function (d, i) { 
    return i ? (d/100) : d; 
}) 

var chart = c3.generate({ 
    data: { 
     columns: [ 
      fakeData, 
      ['data2', 100, 200, 100, 40, 150, 250] 
     ], 
    } 
}); 


// do code to take over mars and plant potatoes 


// save the original 
var originalGetTooltipContent = chart.internal.getTooltipContent; 
chart.internal.getTooltipContent = function (data, defaultTitleFormat, defaultValueFormat, color) { 
    // we modified the first series, so let's change that alone back 
    var originalValue = { 
     id: data[0].id, 
     index: data[0].index, 
     name: data[0].name, 
     // unfaked 
     value: data[0].value * 100, 
     x: data[0].x 
    }; 

    var originalValues = data.map(function (d, i) { 
     return i ? d : originalValue; 
    }) 

    return originalGetTooltipContent.call(this, originalValues, defaultTitleFormat, defaultValueFormat, color) 
} 

Я предполагаю, что вы уже делаете что-то о уложенных у метки оси?


Fiddle - http://jsfiddle.net/puf248en/

0

Благодаря potatopeelings,

я получится решить этот просто загружая данные формы во всех сразу, а затем программно показать/скрыть определенные метрики. Таким образом, это позволило мне использовать все опции generate() по назначению.

Пробовал ваше решение, и, похоже, это помогло, пока я не нашел более простой вариант. Благодаря!

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

  • Нет связанных вопросов^_^