2013-11-09 28 views
5

stavo provando il codice da questo sito: http://bl.ocks.org/bycoffe/3230965messaggio "d3.js TypeError: n è indefinito" (per la D3 mappa del mondo con il layout forza)

enter image description here

io continuo ad avere l'errore che " n non è definito ".

Su ulteriore ridimensionamento, sono giunto alla conclusione che il problema è con queste linee:

(function() { 
     var width = 800; 
     var height = 700; 
     var padding = 10; 
     var k; 
     var node; 

     var pixelLoc = d3.geo.mercator(); 
     pixelLoc.scale(2000); 

     svg = d3.select('#map') 
       .append('svg:svg') 
       .attr('width', width) 
       .attr('height', height); 

     d3.json('coordinates.json', function(coordinates) { 

     var coords = []; 
     var xs = []; 
     var ys = [] 
     for (alias in coordinates) { 
      coords.push(coordinates[alias]); 
      xs.push(coordinates[alias][0]); 
      ys.push(coordinates[alias][1]); 
     } 

     var minX = d3.min(xs); 
     var maxX = d3.max(xs); 
     var xScale = d3.scale.linear().domain([minX, maxX]).range([-50, -30]); 
     var minY = d3.min(ys); 
     var maxY = d3.max(ys); 
     var yScale = d3.scale.linear().domain([minY, maxY]).range([-20, -10]); 

     d3.json('medals.json', function(medals) { 

      var pointScale = d3.scale.sqrt().domain([0, 80]).range([0, 75]); 

      nodes = [] 

      for (i=0; i<medals.length; i++){ 
       node = medals[i]; 
       node.coordinates = coordinates[node.alias]; 
       node.cx = xScale(pixelLoc(node.coordinates)[0]); 
      } 

     }) 

Il problema nasce con l'ultima riga:

node.cx = xScale(pixelLoc(node.coordinates)[0]); 

Tuttavia, ho ancora non hanno idea di cosa intendano per "n non è definito". Qualcuno in grado di aiutare?

+0

È possibile creare un [jsfiddle] (http://jsfiddle.net/) che mostra il problema? Non c'è alcun 'n' nella linea a cui si punta e non è chiaro quale potrebbe essere il problema. –

+0

beh, in pratica puoi provare a usare i codici nel link html che ho dato. copia e incolla e prova a eseguirlo localmente. il n non si riferisce ai codici nella linea. si riferisce al file javascript di d3.js. – user2972046

+1

Ah, eseguendolo localmente dici. Quindi sospetto fortemente che tu non stia ospitando il file 'medals.json' su un server web locale mentre apri l''index.html'. È questo il caso? –

risposta

2

Se si utilizza d3.min:

Cambiare la libreria da d3.min.js a d3.js si avrà probabilmente scoprire che i cambiamenti di errore a

TypeError: array è indefinito

Ciò significa che le funzioni min e max non funzionano correttamente.

var minX = d3.min(xs); 
//Change this for actual min value and max for actual max value and it should work.