在 .generate() 之后和 .load() 之前将参数传递给 c3js tooltop
Pass parameter to c3js tooltop after .generate() and before .load()
我试图绘制出彼此没有任何关系的指标,所以我没有绘制出实际值,而是计算了一组在 0-1 之间缩放的替代值,例如一个百分比。
例如:[1, 2, 5] => [0.2, 0.4, 1]
所以现在我有 2 组数据 - 原始版本和缩放版本。我将缩放版本绘制到我的图表上就好了,但我希望工具提示向用户显示 original 值。明白我的意思了吗?
我查看了http://c3js.org/samples/tooltip_format.html,它表明您可以在最初生成 C3 对象时将工具提示设置为函数。但是我想稍后在重新计算 original/scaled 值并重新 load()
图表后更改工具提示。
我在初始设置 myGraph = C3.generate({...})
后明确更改 myGraph.tooltip.format.value = function (...) {...}
的所有尝试均未成功。
我有什么想法可以做到这一点而不必每次都从头开始重新生成图表吗?
您需要覆盖 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 轴标签?
Fiddle - http://jsfiddle.net/puf248en/
感谢 patotopeelings,
我确实解决了这个问题,只需一次加载所有表单数据,然后以编程方式 show/hide 某些指标。这样我就可以按预期使用所有 generate() 选项。
尝试过您的解决方案,在我找到更简单的选项之前,它似乎可以解决问题。谢谢!
我试图绘制出彼此没有任何关系的指标,所以我没有绘制出实际值,而是计算了一组在 0-1 之间缩放的替代值,例如一个百分比。
例如:[1, 2, 5] => [0.2, 0.4, 1]
所以现在我有 2 组数据 - 原始版本和缩放版本。我将缩放版本绘制到我的图表上就好了,但我希望工具提示向用户显示 original 值。明白我的意思了吗?
我查看了http://c3js.org/samples/tooltip_format.html,它表明您可以在最初生成 C3 对象时将工具提示设置为函数。但是我想稍后在重新计算 original/scaled 值并重新 load()
图表后更改工具提示。
我在初始设置 myGraph = C3.generate({...})
后明确更改 myGraph.tooltip.format.value = function (...) {...}
的所有尝试均未成功。
我有什么想法可以做到这一点而不必每次都从头开始重新生成图表吗?
您需要覆盖 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 轴标签?
Fiddle - http://jsfiddle.net/puf248en/
感谢 patotopeelings,
我确实解决了这个问题,只需一次加载所有表单数据,然后以编程方式 show/hide 某些指标。这样我就可以按预期使用所有 generate() 选项。
尝试过您的解决方案,在我找到更简单的选项之前,它似乎可以解决问题。谢谢!