2016-07-21 13 views
0

Hier ist ein schönes dygraphHandhabung Unendlichkeiten in Dygraph

var data = [1,2,3,3,2].map((d,i) => [i, d]); 
 

 
new Dygraph(document.getElementById("demodiv"), data, {labels: ["Date", "series1"]});
<script src="http://dygraphs.com/dygraph-combined.js"></script> 
 

 
<div id="demodiv"></div>

Aber hier ist was passiert, wenn eine der Proben ist Unendlichkeit wie 4/0

var infty = 4/0 
 
var data = [1,2,infty,3,2].map((d,i) => [i, d]); 
 

 
new Dygraph(document.getElementById("demodiv"), data, {labels: ["Date", "series1"]});
<script src="http://dygraphs.com/dygraph-combined.js"></script> 
 

 
<div id="demodiv"></div>

Die ganze Grafik verschwindet irgendwo. Was ist die vermeintliche Lösung?

Antwort

0

Ich habe das Problem zu einem gewissen Grad gelöst, indem der Maximalwert

var data = [1,2,4/0,3,10,2,1,0/0,2,1] 
 
var filtered = data.filter(a => !(a == Infinity || isNaN(a))) 
 
var r = ['min', 'max'].map(name => Math[name]).map(f => f(...filtered)) 
 
new Dygraph(document.getElementById("demodiv"), data.map((d,i) => [i, d]) 
 
\t , {labels: ["Date", "series1"], valueRange:r});
<script src="http://dygraphs.com/dygraph-combined.js"></script> 
 

 
<div id="demodiv"></div>

Wie Sie sehen precomputing, die Unendlichkeit, die wir bei x = 2 haben wird einfach ignoriert. Ich wünsche mir jedoch, dass das Diagramm es vertikal nach oben über das "Dach" hinaus zeigt, um die Unendlichkeit zu visualisieren. Ich musste es tun manuell

var data = [1,2,4/0,3,10,2,1,0/0,2,1] 
 
var filtered = data.filter(a => !(a == Infinity || isNaN(a))) 
 
var r = ['min', 'max'].map(name => Math[name]).map(f => f(...filtered)) 
 

 
// map infinities to large numbers. These nums are too large for the displayed range and did not participate in visible range definition 
 
//var m = new Map(); m.set(Infinity, Number.MAX_VALUE); m.set(-Infinity, Number.MIN_VALUE) // min/max are too large for the Dygraph 
 
var m = new Map(); m.set(Infinity, 1e7); m.set(-Infinity, -1e7) 
 
data = data.map(a => m.get(a) || a) 
 

 
new Dygraph(document.getElementById("demodiv"), data.map((d,i) => [i, d]) 
 
\t , {labels: ["Date", "series1"], valueRange:r});
<script src="http://dygraphs.com/dygraph-combined.js"></script> 
 

 
<div id="demodiv"></div>

Dies macht jedoch ein anderes Problem: die Wertelabels auch Infinity-1e7 umgewandelt werden. Wenn Sie mit der Maus über das Diagramm fahren, sehen Sie, dass der Wert 1e7 und nicht Infinity ist.