javascript - d3.js 中对数刻度的奇怪行为

标签 javascript d3.js

我这里有一个 2 个尺度的散点图。用户可以通过每个轴的单选按钮来决定他需要线性还是对数刻度。 y 轴的默认刻度是 log,x 轴的默认刻度是 linear。这非常有效。我得到一个漂亮的图表,每个轴上有 7 个值,y 轴上的值从 1 到 1000000。 我对 y 轴使用以下代码:

d3.scaleLog()
           .domain([1, 9535511.8])
           .range([that.height, 1])

对于 x 轴:

d3.scaleLinear()
           .domain([1, 119.05])
           .range([1, that.width]);

因为 x 轴是线性的。

现在,当我将 xscale 更改为单选按钮上的 change 事件时,它的行为很奇怪。它仍然有效,但我得到一个丑陋的轴,数字 1 到 10 直到轴的一半,然后 20 到 100 直到结束。在更改方法上,我正在做这样的事情:

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);
  • 在 d3 中这样做有什么不对吗?
  • 有什么方法可以解决这个问题吗?

最佳答案

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

尝试设置:.ticks(10)

关于javascript - d3.js 中对数刻度的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51085400/

相关文章:

javascript - 无论有没有 JSON.parse() 都无法将 JSON 响应设置为 var

javascript - Socket IO 独立的 javascript 监听器

javascript - 有没有办法改变谷歌图表中 vaxis 基线的宽度/厚度?

javascript - 在 D3 中使用投影进行动态简化

javascript - 优化 javascript d3 语句

d3.js - 路径内的 svg 路径

javascript - 从键盘写入 SVG 文本

javascript - D3 缩放未正确重置缩放状态和平移位置

javascript - Promise.All 用于图像列表

javascript - Material UI 特定的文本字段验证意外行为