D3.js nvd3-多柱状图:如何记录y轴比例
根据需要,可以在多条形图上设置yScale,因为yScale应该是继承的方法 我想把它按对数比例缩放。我在使用D3.js nvd3-多柱状图:如何记录y轴比例,d3.js,nvd3.js,D3.js,Nvd3.js,根据需要,可以在多条形图上设置yScale,因为yScale应该是继承的方法 我想把它按对数比例缩放。我在使用lineChart.yScale(d3.scale.log())时得到了这个结果,但是对于multiBarChart,调用multiBarChart.yScale(d3.scale.log()),结果是yScale不是一个函数 有没有其他方法记录多柱状图的y轴 谢谢我用以下方法解决了这个问题,它由shouldLogScalevar控制: nv.addGraph(() => {
lineChart.yScale(d3.scale.log())
时得到了这个结果,但是对于multiBarChart,调用multiBarChart.yScale(d3.scale.log())
,结果是yScale不是一个函数
有没有其他方法记录多柱状图的y轴
谢谢我用以下方法解决了这个问题,它由shouldLogScale
var控制:
nv.addGraph(() => {
this.chart = nv.models.multiBarChart()
...
.y(d => {
const y = parseFloat(d.y);
return this.shouldLogScale ? Math.log10(y <= 0 ? 1 : y) : y;
});
if(this.shouldLogScale) {
this.logScale();
} else {
this.chart.yAxis.tickFormat(d3.format(`,.${this.precision}f`));
}
...
});
也许我可以使用y域和范围值的映射来避免在logScale
方法中使用log和pow函数
private logScale() {
this.chart.forceY([1, 180]
.map(v => Math.log10(v)));
this.chart.yAxis.tickValues([1, 3, 5, 10, 20, 50, 100, 180]
.map(v => Math.log10(v)));
this.chart.yAxis.tickFormat(d => Math.pow(10, d).toFixed(this.precision));
}