我試過這種不同的方式,但似乎沒有任何工作。以下是我目前有:在D3中繪製多邊形數據的正確格式
var vis = d3.select("#chart").append("svg")
.attr("width", 1000)
.attr("height", 667),
scaleX = d3.scale.linear()
.domain([-30,30])
.range([0,600]),
scaleY = d3.scale.linear()
.domain([0,50])
.range([500,0]),
poly = [{"x":0, "y":25},
{"x":8.5,"y":23.4},
{"x":13.0,"y":21.0},
{"x":19.0,"y":15.5}];
vis.selectAll("polygon")
.data(poly)
.enter()
.append("polygon")
.attr("points",function(d) {
return [scaleX(d.x),scaleY(d.y)].join(",")})
.attr("stroke","black")
.attr("stroke-width",2);
我認爲這裏的問題是要麼與方式我定義的點數據作爲單獨的點對象數組,或用東西怎麼我寫的函數來完成爲.attr("points",...
我一直在尋找教程或如何繪製一個簡單的多邊形的例子,但我似乎無法找到它。
謝謝!我需要研究它,但顯然這個解決方案是有效的。你認爲這是做多邊形的最佳方式嗎?它只是讓我覺得在函數構造中擁有該函數有點笨拙。但也許這就是它的需要?我想我的問題是我應該以這種方式構建數據對象,或者有更好的方法來實現它。 –
給你更多的想法:如果原始數據是一個二維數組,其縮放數據點就像[[x1,y1],[x2,y2],[x3,y3]],那麼點函數會簡單得多:function(d){return d.join(「」); }。這依賴於Javascript的數組默認的toString是用逗號連接它們的事實。例如console.log(「」+ [0,1,2]);會打印「0,1,2」。 – nautat
請參閱修改的提琴演示此示例:http://jsfiddle.net/4xXQT/1/ – nautat