2017-02-13 9 views
1

私はd3ラインジェネレータでラインを作成し、それにデータセットを供給します。このデータセットは1時間ごとに更新されます。空のデータセットを使用してd3ラインを更新

var myline = d3.svg.line()  
    .x(function(d) { return x(d.date); }) 
    .y(function(d) { return y(d.y); }); 

svg.append("path") 
    .data(dataset) 
    .attr("class", "line") 
    .attr("d", myline(dataset)); 

ただし、1時間ごとにデータセットはリセットされ、空です。ただし空のデータセットで行を供給するとデータは変更されませんが、データがないため削除されると思います。

空のデータセットが入力されたときに行を削除する方法はありますか?

+3

は、あなたが行を削除して、行を作成するために、もう一度関数を実行することができます。だから、IDで選択して削除してください。あるいは、すべてのゼロなどのデフォルト値を与えることができます。例が役に立つかもしれません。また、空では全くデータがないことを意味しますか?空のデータセットをどのように表現しますか? – thatOneGuy

+0

dataset = [] – scooterlord

答えて

2

データを表示せずにグラフを更新する方法はありませんが、ここで問題となるのは、データ配列に基づいてパス要素を繰り返し追加することですグラフを更新するたびにデータ関数とバインドする必要があります)。

代わりに、パスを1回だけ追加し、グラフを更新するたびにd属性を変更することもできます。そうすれば、データが空の場合、パスは表示されません。ここで

はデモで、5秒ごとにデータ配列が空である:

var data = []; 
 

 
for(var i = 0; i < 100; i++){ 
 
    data.push({x: i*3, y:Math.random()*150}); 
 
} 
 

 
var svg = d3.select("svg"); 
 

 
var lineGen = d3.svg.line() 
 
    .x(d=>d.x) 
 
    .y(d=>d.y); 
 

 
var line = svg.append("path") 
 
    .attr("fill","none") 
 
    .attr("stroke","black"); 
 

 
var t = 0; 
 
setInterval(function(){ 
 
    var newData = data.slice(0,(t%100)+1); 
 
    line.attr("d", lineGen(newData)); 
 
    t++; 
 
}, 50); 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script> 
 
<svg></svg>

+0

のようにデータセットが空になりますこれは私が探しているものです。うまくいけば私は自分のコードでこれを複製することができます。空のデータセットでは、データセット= []を意味します。データセットにnull値も含まれていれば、それは必要に応じて機能しますが、APIが送信する行を作成して、データセットを受け取るのは随時です[0127]。 – scooterlord

+0

はい、あなたのコメントを見ました。回答。デモでは、あなたの場合と同じように、空のデータセットは '[]'です。 –

+1

...私の間違いは、更新する前に、更新されたデータセットを行にバインドしていたようです。 :/ – scooterlord

関連する問題