2017-04-13 14 views
0

iris.CSVからロードデータを取得しようとしていて、ウェブページにプロットしようとしています。エラー:未知のタイプエラー:未定義のプロパティ 'linear'を読み取ることができません

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>D3 Example</title> 
    <script src="https://d3js.org/d3.v3.js"></script> 
    </script> 
</head> 

<body> 
    <script> 
     var svg = d3.select("body").append("svg") 
      .attr("width", 250) 
      .attr("height", 250); 

     var xScale = d3.scale.linear().range([0, 250]); 
     var yScale = d3.scale.linear().range([0, 250]); 

     function render(data) { 

      xScale.domain(d3.extent(data, function(d) { 
       return d.sepal_length; 
      })); 
      yScale.domain(d3.extent(data, function(d) { 
       return d.petal_length; 
      })); 

      var circles = svg.selectAll("circle").data(data); 
      circles.enter().append("circle").attr("r", 10); 
      circles 
       .attr("cx", function(d) { 
        return xScale(d.sepal_length); 
       }) 
       .attr("cy", function(d) { 
        return yScale(d.petal_length); 
       }); 

      circles.exit().remove(); 
     } 

     function type(d) { 
      d.sepal_length = +d.sepal_length; 
      d.sepal_width = +d.sepal_width; 
      d.petal_length = +d.petal_length; 
      d.petal_width = +d.petal_width; 
      return d; 
     } 

     d3.csv("iris.csv", type, render); 
    </script> 

</body> 

</html> 

しかし、私はエラーが発生しています。

Error: Uncaught TypeError: Cannot read property 'linear' of undefined

私もd3.v4ためscaleLinearためlinearを変更しました。また、エラーを示すされています。

+0

'コードは大丈夫です。スケールの宣言に先立つ 'd3.select()'が機能しているようだから、これはあなたの問題の原因ではないはずです。効果を示す[mcve]を設定してください。そうすると、可能な限りコードを減らしてきれいにしてください。 – altocumulus

+0

でも、「クロスオリジンリクエストはプロトコルスキームでのみサポートされています:HTTP、データ、クロム、クロムエクステンション、https」エラーです。 –

答えて

0

(私はCSVので、私はいくつかの偽のデータを使用したファイルはありませんでした)私のために動作するようです:

別に `における単一` `タグから

var svg = d3.select("body").append("svg") 
 
    .attr("width", 250) 
 
    .attr("height", 250); 
 

 
var xScale = d3.scale.linear().range([10, 240]); 
 
var yScale = d3.scale.linear().range([10, 240]); 
 

 
function render(data) { 
 

 
    xScale.domain(d3.extent(data, function(d) { 
 
    return d.sepal_length; 
 
    })); 
 
    yScale.domain(d3.extent(data, function(d) { 
 
    return d.petal_length; 
 
    })); 
 

 
    var circles = svg.selectAll("circle").data(data); 
 
    circles.enter().append("circle").attr("r", 10); 
 
    circles 
 
    .attr("cx", function(d) { 
 
     return xScale(d.sepal_length); 
 
    }) 
 
    .attr("cy", function(d) { 
 
     return yScale(d.petal_length); 
 
    }); 
 

 
    circles.exit().remove(); 
 
} 
 

 
function type(d) { 
 
    d.sepal_length = +d.sepal_length; 
 
    d.sepal_width = +d.sepal_width; 
 
    d.petal_length = +d.petal_length; 
 
    d.petal_width = +d.petal_width; 
 
    return d; 
 
} 
 

 
render([{ 
 
    sepal_length: 10, 
 
    petal_length: 20, 
 
    }, 
 
    { 
 
    sepal_length: 15, 
 
    petal_length: 18, 
 
    } 
 
])
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

+0

を使用しましたが、このエラーが発生します:XMLHttpRequestでファイルをロードできません:/ //D:/Zjtryiris.csv。 Cross originリクエストは、http、data、chrome、chrome-extension、httpsのプロトコルスキームでのみサポートされています。 –

+0

問題は、このコードがGoogle Chromeで動作していないことです。しかし、Mozilla Firefoxで働いています。それはなぜそうですか? –

+0

ファイルはWebサーバーによって提供される必要があります。あなたがPythonを持っていれば、あなたは 'python -m SimpleHTTPServer'を実行してブラウザを' http:// localhost:8000'にすることができます – thedude

関連する問題