更改 C3.js 图表上的工具提示格式
Change tooltip format on C3.js Chart
我的页面上有这样的图表:
var chart = c3.generate({
data: {
columns: [
['data1', 30000, 20000, 10000, 40000, 15000, 250000],
['data2', 100, 200, 100, 40, 150, 250]
],
axes: {
data2: 'y2'
}
},
axis : {
y : {
tick: {
format: d3.format("s")
}
},
y2: {
show: true,
tick: {
format: d3.format("$")
}
}
},
tooltip: {
format: {
title: function (d) { return 'Data ' + d; },
value: function (value, ratio, id) {
var format = id === 'data1' ? d3.format(',') : d3.format('$');
return format(value);
}
//value: d3.format(',') // apply this format to both y and y2
}
}
});
它工作正常,但我有一个更改数据的按钮:
$('#filter').on('click', function(event) {
event.preventDefault();
chart.load({
unload: true,
columns: [
['data1', 70, 100, 140, 80],
['data2', 30, 140, 40, 80]
]
});
});
更改后我想更改工具提示格式,但找不到更改和更新它的方法。是否可以在每次有人单击按钮时不重新创建图表就可以做到这一点?
要记住的关键是,标题、格式等是每次显示工具提示时 运行 的函数 - 因此需要做的就是将逻辑引入这些函数中,以便进行切换所需的格式。
在您的情况下,也许您可以只使用一个简单的变量将格式表示为数字。例如
var format = 1;
然后在你的格式函数中设置条件...
tooltip: {
format: {
title: function (d) {
if(format === 1) return 'Data ' + d;
if(format === 2) return 'New Data ' + d;
},
// etc ...
}
}
点击最后设置你想要的格式...
$('#filter').on('click', function(event) {
event.preventDefault();
format = 2; // simple
chart.load({
unload: true,
columns: [
['data1', 70, 100, 140, 80],
['data2', 30, 140, 40, 80]
]
});
});
显然这是一个非常简单的示例,但原理保持不变 - 将用于设置所需格式的逻辑放入 run-time 函数中以显示工具提示 - 这样您就可以更改它们的显示方式无需每次都重新创建图表。
完全没有理由不能在 object 层次结构中采用函数方法级别或更高级别 - 例如在格式或工具提示级别。
每当需要 object 或值时 - 只要 returns 类型符合要求,您始终可以使用函数。例如
var formatx = { ... }
tooltip: {
format: function() {
switch(format) {
case 1: return { ... },
case 2: return formatx,
...
}
}
}
我的页面上有这样的图表:
var chart = c3.generate({
data: {
columns: [
['data1', 30000, 20000, 10000, 40000, 15000, 250000],
['data2', 100, 200, 100, 40, 150, 250]
],
axes: {
data2: 'y2'
}
},
axis : {
y : {
tick: {
format: d3.format("s")
}
},
y2: {
show: true,
tick: {
format: d3.format("$")
}
}
},
tooltip: {
format: {
title: function (d) { return 'Data ' + d; },
value: function (value, ratio, id) {
var format = id === 'data1' ? d3.format(',') : d3.format('$');
return format(value);
}
//value: d3.format(',') // apply this format to both y and y2
}
}
});
它工作正常,但我有一个更改数据的按钮:
$('#filter').on('click', function(event) {
event.preventDefault();
chart.load({
unload: true,
columns: [
['data1', 70, 100, 140, 80],
['data2', 30, 140, 40, 80]
]
});
});
更改后我想更改工具提示格式,但找不到更改和更新它的方法。是否可以在每次有人单击按钮时不重新创建图表就可以做到这一点?
要记住的关键是,标题、格式等是每次显示工具提示时 运行 的函数 - 因此需要做的就是将逻辑引入这些函数中,以便进行切换所需的格式。
在您的情况下,也许您可以只使用一个简单的变量将格式表示为数字。例如
var format = 1;
然后在你的格式函数中设置条件...
tooltip: {
format: {
title: function (d) {
if(format === 1) return 'Data ' + d;
if(format === 2) return 'New Data ' + d;
},
// etc ...
}
}
点击最后设置你想要的格式...
$('#filter').on('click', function(event) {
event.preventDefault();
format = 2; // simple
chart.load({
unload: true,
columns: [
['data1', 70, 100, 140, 80],
['data2', 30, 140, 40, 80]
]
});
});
显然这是一个非常简单的示例,但原理保持不变 - 将用于设置所需格式的逻辑放入 run-time 函数中以显示工具提示 - 这样您就可以更改它们的显示方式无需每次都重新创建图表。
完全没有理由不能在 object 层次结构中采用函数方法级别或更高级别 - 例如在格式或工具提示级别。
每当需要 object 或值时 - 只要 returns 类型符合要求,您始终可以使用函数。例如
var formatx = { ... }
tooltip: {
format: function() {
switch(format) {
case 1: return { ... },
case 2: return formatx,
...
}
}
}