sizin için çalışmaz 0 logaritmik ölçek olarak etki alanı sınırları birine sahip bir alan adınız varsa. Ayrıca, günlük ölçeği, belirlenemeyen sayıda keneye sahip bir tick() işlevi sağlar.
Geçerli atamam, doğrusal ölçeklendirilmiş dağılım grafiğinde rastgele etki alanları ve aralıklar içeren verileri görüntülemektir. AMA isteğe bağlı olarak kullanıcı logaritmik skalada değişebilir. Bu sorunlu [0, n] ve [n, 0] alanlarını içerir.
İşte ben bu davalarına bakacak ile geldi bir çözüm: pozitif sınırları olan keyfi bir aralığa Domainimizin proje doğrusal ölçek kullanıyorsanız sorun önlenebilir . [1,10] 'u seçiyorum ama herhangi bir pozitif sayı alabilir. Bundan sonra normal log ölçeği kullanabiliriz.
d3.scale.genericLog = function() {
return GenericLog();
};
function GenericLog() {
var PROJECTION=[1,10];
var linearScale, logScale;
linearScale=d3.scale.linear();
linearScale.range(PROJECTION);
logScale=d3.scale.log();
logScale.domain(PROJECTION);
function scale(x) {
return logScale(linearScale(x));
}
scale.domain = function(x) {
if (!arguments.length) return linearScale.domain();
linearScale.domain(x);
return scale;
};
scale.range = function(x) {
if (!arguments.length) return logScale.range();
logScale.range(x);
return scale;
};
scale.ticks = function(m) {
return linearScale.ticks(m);
};
return scale;
}
Kullanımı: Sadece aralık(), ölçek(), işlevleri ben sadece bu dahil böylece) (keneler ama hepsi uygulamak için 5 dakikadan fazla sürmemelidir gerekli
var scale1 = d3.scale.genericLog().domain([0,1]).range([500,1000]);
var scale2 = d3.scale.genericLog().domain([-10,0]).range([500,1000]);
scale1(0) //500
scale2(-10) //500
scale2(0) //100
diğerleri. Ayrıca, lineer skaladaki() değerleri kullanıyorum çünkü kenelerin sayısını sınırlamak zorunda kaldım ve bu da lineer skala ile daha kolay.
DÜZENLEME: Eğer bu sizin günlük ölçeği bozar PROJEKSİYON olarak ne seçtiğinize bağlı be farkında. Kullandığınız daha geniş aralık, ölçeğinizin alt kısmını daha fazla koruyacaktır.