d3.js中对数刻度的怪异行为

时间:2018-06-28 14:27:14

标签: javascript d3.js

我在这里有2个比例的散点图。用户可以通过单轴按钮确定是否需要线性或对数刻度。 y轴的默认比例尺为d3.scaleLog() .domain([1, 9535511.8]) .range([that.height, 1]) ,x轴的默认比例尺为d3.scaleLinear() .domain([1, 119.05]) .range([1, that.width]); 。这很完美。我得到一个漂亮的图形,每个轴上有7个值,在y上,我的值从1到1000000。 我将以下代码用于y轴:

scale

对于x轴:

x

由于x轴是线性的。

现在,当我将change的{​​{1}}更改为单选按钮上的var xLg = d3.scaleLog() .domain([1, 119.05]) .range([1, that.width]); var xAxisLog = d3.axisBottom(xLg) .ticks(5) .tickFormat(function(d){ return d; }); d3.selectAll("g.axisX").transition().duration(100).call(xAxisLog); 事件时,它的行为很奇怪。它仍然有效,但是我得到了一个丑陋的轴,其数字1到10直到轴的一半,然后是20到100直到结尾。在更改方法上,我正在执行以下操作:

import PyV8

context = PyV8.JSContext()
context.enter()

js = """Write your javascript code here"""
  • 在d3中以这种方式操作是否有问题?
  • 有什么办法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

如Mike Bostock here所述,the的给定数量是d3.ticks使用的准则,不能保证所生成的ticks数组的长度相同。

尝试设置:.ticks(10)