在.generate()之后和.load()之前将参数传递给c3js tooltop

时间:2015-07-24 20:52:25

标签: javascript d3.js c3

我试图绘制出彼此之间没有任何关系的指标,因此我计算了一组替代值,而不是绘制实际值。 0-1喜欢百分比。

例如:[1, 2, 5] => [0.2, 0.4, 1]

所以现在我有2组数据 - 原始和缩放版本。我已经将缩放版本绘制到我的图表上,但我希望工具提示向用户显示原始值。明白我的意思?

我检查了http://c3js.org/samples/tooltip_format.html,这表明您可以在最初生成C3对象时将工具提示设置为函数。但是我想在稍后重新计算原始/缩放值并重新load()图形后更改工具提示。

我在最初设置myGraph.tooltip.format.value = function (...) {...}后明确更改myGraph = C3.generate({...})所做的所有尝试均未成功。

我是如何在不必每次都从头开始重新生成图形的情况下完成此任务的?

2 个答案:

答案 0 :(得分: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)
}

我假设您已经对缩放的y轴标签做了些什么?

小提琴 - http://jsfiddle.net/puf248en/

答案 1 :(得分:0)

感谢potatopeelings,

我确实通过简单地一次性加载表单数据来解决这个问题,然后以编程方式显示/隐藏某些指标。这样我就可以按预期使用所有的generate()选项。

试过你的解决方案,似乎直到我找到了更简单的选项。谢谢!