2016-11-05 26 views
6

d3'te bir logaritmik ölçek oluşturmayla ilgili sorunlarım var. Ölçek, doğrusal olarak ayarlanmışsa iyi çalışır.Logaritmik ölçek döndürür NaN

Bu çalışır: Ancak

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

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

, bu işe yaramazsa:

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

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

logaritmik ölçek nesi var?

cevap

8
o içermez böylece etki alanınızı değiştirin veya sıfır çapraz

:

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>

0.000001 olduğunu ben 1e-6 kullanıyorum Yukarıdaki demo, In.

açıklama

: sıfır logaritması tanımlanmamış

(ya da tanımlanmaktadır). Baz (10) 'da, örneğin (0) x numaralı bir sayıdır, böylece x'un gücüne yükseltilmiş olan 10 sıfırdır ... bu sayı elbette mevcut değildir. Ancak, sıfırdan pozitif tarafa yaklaştığımızda sınır, eksi sonsuzdur. saf JavaScript içinde

: Böylece

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

, JavaScript, log(0) eksi sonsuz, ya da eksi sonsuz olduğu. API göre

söyleniyor

: bir günlük ölçeği ya bir özel pozitif ya da özel olarak negatif alana sahip olması gerekir

; etki alanı 'u içermemeli veya sıfırını içermemelidir. (vurgu benim)