我正在使用d3庫來繪製帶有通過websockets從服務器接收到的JSON對象的條形圖。但是,發生的情況是,每次繪製圖形時都會繪製一個圖形的新實例。所以我結束了多個圖表。關於圖的多個實例的圖
但我希望JSON數據全部繪製在同一張圖上。
這裏是我的代碼:
ws = new WebSocket("ws://localhost:8888/dh");
var useData = []
//var chart;
var chart = d3.select("body")
.append("svg:svg")
.attr("class", "chart")
.attr("width", 420)
.attr("height", 200);
ws.onmessage = function(evt)
{
var distances = JSON.parse(evt.data);
data = distances.miles;
console.log(data);
if(useData.length <= 10){
useData.push(data)
}
else
{
var draw = function(data){
// Set the width relative to max data value
var x = d3.scale.linear()
.domain([0, d3.max(useData)])
.range([0, 420]);
var y = d3.scale.ordinal()
.domain(useData)
.rangeBands([0, 120]);
var rect = chart.selectAll("rect")
.data(useData)
// enter rect
rect.enter().append("svg:rect")
.attr("y", y)
.attr("width", x)
.attr("height", y.rangeBand());
// update rect
rect
.attr("y", y)
.attr("width", x)
.attr("height", y.rangeBand());
var text = chart.selectAll("text")
.data(useData)
// enter text
text.enter().append("svg:text")
.attr("x", x)
.attr("y", function (d) { return y(d) + y.rangeBand()/2; })
.attr("dx", -3) // padding-right
.attr("dy", ".35em") // vertical-align: middle
.attr("text-anchor", "end") // text-align: right
.text(String);
// update text
text
.data(useData)
.attr("x", x)
.text(String);
}
useData.length = 0;
}
}
如何我可以積所有點到上圖正在被不斷更新?
令人遺憾的是,d3無法實時處理數據並相應更新圖表,或者如果沒有明確的教程/如何解釋。
感謝
感謝您的回覆。我嘗試過,現在只繪製一次圖表,但沒有用新數據更新該圖表。 – user94628
也許是因爲高度只能設置一次。可能需要在if語句之外執行'chart.attr('height',20 * useData.length)' –
將if語句之外的chart.attr('height',20 * useData.length)放在if語句之外。 – user94628