2016-11-05 120 views
6

我在d3中創建對數刻度時遇到了問題。如果設置爲線性,則標尺運行正常。對數刻度返回NaN

這工作:

var myLinScale = d3.scale.linear() 
     .domain([0, 100]) 
     .range([50, 1150]); 

console.log(myLinScale(71)); //output = 831 

然而,這不起作用:

var myLogScale = d3.scale.log() 
     .domain([0, 100]) 
     .range([50, 1150]); 

console.log(myLogScale(71)); //output = NaN 

什麼是錯的對數刻度?

回答

8

更改您的域,以便它不包括或過零:

var myLogScale = d3.scale.log() 
 
     .domain([1e-6, 100])//domain doesn't include zero now 
 
     .range([50, 1150]); 
 

 
console.log(myLogScale(71));
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

在上面的演示中,我正在使用1e-6,這是0.000001

說明:

的零對數是未定義的(或不定義)。例如,在基數10中,log(0)是一個數字x,因此提升到x的功率爲10的零數......當然這個數字不存在。然而,當我們從正面接近零時,極限是負無窮。

在純JavaScript:

console.log("Log of 0 is: " + Math.log(0))

因此,在JavaScript中,log(0)是負無窮大,或負無窮大。

如此說來,根據API

數標度必須具有一個專門陽性或僅負域;該域名不得包含或交叉零。 (重點是我的)