如何使轴刻度线仅是整数?
我尝试过的是使用tick选项:
tick: {
format: function(x) {
return (x == Math.floor(x)) ? x : "";
}
}
这样可以使标签仅显示整数,但轴上的分割线仍然存在。
有没有办法控制轴刻度?
在当前的开发版本(主版)上,您可以使用axis.y.values设置刻度列表。 例如
{
axis: {
y: {
ticks: [1,2,3]
}
}
}
但这不能基于数据源是动态的,对吗?
您可以在数据加载后计算这些值,将其设置为chart.internal.config.axis_y_tick_values
,然后调用chart.flush()
以应用新的轴值。
这个代码怎么样?
axis: {
y: {
tick: {
format: function (x) {
if (x != Math.floor(x)) {
var tick = d3.selectAll('.c3-axis-y g.tick').filter(function () {
var text = d3.select(this).select('text').text();
return +text === x;
}).style('opacity', 0);
return '';
}
return x;
}
}
}
}
看来已经解决了,所以请让我关闭。
FWIW,要求了解D3的内部知识并运行JS似乎很奇怪。 我在C3问题中经常看到这种模式:有人遇到了问题,而不是提供C3选项,而是使用d3来操纵底层SVG的5-30行JavaScript。 我认为,从长远来看,这将不利于C3的采用。
特别是对于此问题,“ axis.y.tick.integer_only”选项将具有不可思议的价值。 我很乐意为此提供对C3的扩展。 我在这里看到一个示例扩展。 有扩展指南可以指导我吗?
谢谢!
编辑:语法。
您可以在数据加载后计算这些值,将其设置为chart.internal.config.axis_y_tick_values,然后调用chart.flush()以应用新的轴值。
提到这一点,因为我今天也遇到了这个问题-进行flush()
会弄乱数据更改的动画,并且添加延迟也会带来一些图形故障。 但是,在调用load()
之前将chart.internal.config.axis_y_tick_values
为适当的值非常有效。 也许这对某人会有所帮助:)。
更好的版本:
axis: {
y: {
tick: {
format: function(x) { return x % 1 === 0 ? x : ''; }
}
}
}
谢谢nnabinh-劳累了。
最有用的评论
更好的版本: