Ho provato questo modo diverso, ma non sembra funzionare nulla. Ecco quello che ho attualmente:Formato corretto per il disegno di dati poligono in 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);
Suppongo che il problema qui è sia con il modo in cui mi sto definendo i dati di punti come un array di oggetti punto singoli, o qualcosa a che fare con il modo in cui sto scrivendo la funzione per il .attr("points",...
Ho cercato su tutto il web un tutorial o un esempio di come disegnare un poligono semplice, ma proprio non riesco a trovarlo.
Grazie! Ho bisogno di studiarlo, ma ovviamente questa soluzione funziona. Pensi che questo sia il modo migliore per fare un poligono? Mi sembra un po 'goffo avere quella funzione all'interno di un costrutto di funzione. Ma forse è così che deve essere? Credo che le mie domande siano nel caso io debba costruire l'oggetto dati in questo modo, o forse c'è un modo migliore/più pulito per farlo. –
Per darvi qualche idea in più: se i dati originali fossero stati un array 2D con datapoint scalati come [[x1, y1], [x2, y2], [x3, y3]], la funzione dei punti sarebbe molto più semplice : function (d) {return d.join (""); }. Questo si basa sul fatto che il toString predefinito di Javascript per un array è quello di unirsi a loro con una virgola. Ad esempio console.log ("" + [0,1,2]); stamperebbe "0,1,2". – nautat
Vedere il violino modificato che illustra questo esempio: http://jsfiddle.net/4xXQT/1/ – nautat