Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3js v5+;拓扑图未渲染_Javascript_D3.js_Topojson - Fatal编程技术网

Javascript d3js v5+;拓扑图未渲染

Javascript d3js v5+;拓扑图未渲染,javascript,d3.js,topojson,Javascript,D3.js,Topojson,我不知道为什么,根据topojson版本(可能是),我有: 类型错误:t未定义 一个解释可能很好!(我使用的是topojson的最新版本。) 这里的TypeError示例未定义(指向topojson文件) var svg=d3。选择(“svg”), 宽度=+svg.attr(“宽度”), 高度=+svg.attr(“高度”); var=d3.map(); var path=d3.geoPath(); var x=d3.scaleLinear() .domain([1,10]) .rangeRo

我不知道为什么,根据topojson版本(可能是),我有:

类型错误:t未定义

一个解释可能很好!(我使用的是topojson的最新版本。)

这里的TypeError示例未定义(指向topojson文件)


var svg=d3。选择(“svg”),
宽度=+svg.attr(“宽度”),
高度=+svg.attr(“高度”);
var=d3.map();
var path=d3.geoPath();
var x=d3.scaleLinear()
.domain([1,10])
.rangeRound([600860]);
var color=d3.scaleThreshold()
.域(d3.范围(2,10))
.范围(d3.模式值[9]);
var g=svg.append(“g”)
.attr(“类”、“键”)
.attr(“转换”、“翻译(0,40)”);
g、 selectAll(“rect”)
.data(color.range().map)(函数(d){
d=颜色。反相器范围(d);
如果(d[0]==null)d[0]=x.domain()[0];
如果(d[1]==null)d[1]=x.domain()[1];
返回d;
}))
.enter().append(“rect”)
.attr(“高度”,8)
.attr(“x”,函数(d){返回x(d[0]);})
.attr(“宽度”,函数(d){返回x(d[1])-x(d[0]);})
.attr(“fill”,函数(d){返回颜色(d[0]);});
g、 附加(“文本”)
.attr(“类”、“标题”)
.attr(“x”,x.range()[0])
.attr(“y”,-6)
.attr(“填充”、“千”)
.attr(“文本锚定”、“开始”)
.attr(“字体大小”、“粗体”)
.text(“失业率”);
g、 调用(d3.axisBottom(x)
.尺寸(13)
.tickFormat(函数(x,i){返回i?x:x+“%”;})
.dock值(color.domain())
.select(“.domain”)
.remove();
var文件=[”https://d3js.org/us-10m.v1.json“,“失业率.tsv”];
var promises1=d3.json(“https://d3js.org/us-10m.v1.json");
var promises2=d3.tsv(“失业率tsv”);
承诺。所有([承诺人1,承诺人2])。然后(功能(我们){
console.log(us[0]);
console.log(美国[1]);
svg.append(“g”)
.attr(“类”、“县”)
.selectAll(“路径”)
.data(topojson.feature(美国,美国[0].objects.countries.features)
.enter().append(“路径”)
.attr(“fill”,函数(d){returncolor(d.rate=demission.get(d.id));}
.attr(“d”,路径)
.附加(“标题”)
.text(函数(d){返回d.rate+“%”;});
追加(“路径”)
.datum(topojson.mesh(us,us[0].objects.states,函数(a,b){返回a!==b;}))
.attr(“类别”、“状态”)
.attr(“d”,路径);
});
我的代码:

原件(d3js v4+Topojson v2):

这里,TypeError的另一个例子是未定义的(指向topojson文件)


我的代码:

这两个示例有两个与topojson相关的独立问题

在第一个示例中,由于文件获取方式的改变,您将topojson的存放位置从
us
更新为
us[0]
。但是,您尚未完全更新代码以反映此更改:

原始版本:
.data(topojson.feature(us,us.objects.countries.features)

有疑问:
.data(topojson.feature(美国,美国[0].objects.countries.features)

并修复:
.data(topojson.feature(us[0],us[0].objects.countries.features)

更新


然而,第二个例子中的问题有点不同

topojson.feature
需要两个参数,一个拓扑和一个对象。拓扑结构是保存json的变量,您可以使用正确的拓扑结构。但是,对象不是
。包含topojson的变量有一个名为objects的属性,其中始终至少有一个属性表示要素集合(州、县等)。这个对象(或其中一个对象)就是我们想要的

以下是您的topojson的一个片段:

。。。“对象”:{“dep_GEN_WGS84_UTF8”:{“类型”:“GeometryCollection”,“几何体”:[{“arcs…”

我们需要
topojson.feature(数据,数据,对象,dep\u GEN\u WGS84\u UTF8)

如果使用mapshaper等工具制作topojson,我们要显示的对象与用于创建它的文件的名称相同。通常,通过topojson快速搜索“object”也会让您很快找到正确的对象

topojson中的arcs属性便于存储组成要素的各个部分,而不是要素本身

更新


在这两种情况下,传递给
topojson.feature
的拓扑参数将不包含指定的功能,从而产生相同的错误

<!DOCTYPE html>
<html>

  <head>
    <link rel="stylesheet" href="style.css">
    <script src="https://unpkg.com/d3@5.0.0/dist/d3.min.js"></script>
    <script src="https://d3js.org/d3-scale-chromatic.v1.min.js"></script>
    <script src="https://d3js.org/topojson.v2.min.js"></script>
  </head>

  <body>


  <svg width="960" height="600"></svg>

  <script>

    var svg = d3.select("svg"),
        width = +svg.attr("width"),
        height = +svg.attr("height");

    var unemployment = d3.map();

    var path = d3.geoPath();

    var x = d3.scaleLinear()
        .domain([1, 10])
        .rangeRound([600, 860]);

    var color = d3.scaleThreshold()
        .domain(d3.range(2, 10))
        .range(d3.schemeBlues[9]);

    var g = svg.append("g")
        .attr("class", "key")
        .attr("transform", "translate(0,40)");

    g.selectAll("rect")
      .data(color.range().map(function(d) {
          d = color.invertExtent(d);
          if (d[0] == null) d[0] = x.domain()[0];
          if (d[1] == null) d[1] = x.domain()[1];
          return d;
        }))
      .enter().append("rect")
        .attr("height", 8)
        .attr("x", function(d) { return x(d[0]); })
        .attr("width", function(d) { return x(d[1]) - x(d[0]); })
        .attr("fill", function(d) { return color(d[0]); });

    g.append("text")
        .attr("class", "caption")
        .attr("x", x.range()[0])
        .attr("y", -6)
        .attr("fill", "#000")
        .attr("text-anchor", "start")
        .attr("font-weight", "bold")
        .text("Unemployment rate");

    g.call(d3.axisBottom(x)
        .tickSize(13)
        .tickFormat(function(x, i) { return i ? x : x + "%"; })
        .tickValues(color.domain()))
      .select(".domain")
        .remove();




    var files = ["https://d3js.org/us-10m.v1.json", "unemployment.tsv"];
    var promises1 = d3.json("https://d3js.org/us-10m.v1.json");
    var promises2 = d3.tsv("unemployment.tsv");



    Promise.all([promises1, promises2]).then(function(us){
        console.log(us[0]);
        console.log(us[1]);


      svg.append("g")
          .attr("class", "counties")
        .selectAll("path")
        .data(topojson.feature(us, us[0].objects.counties).features)
        .enter().append("path")
          .attr("fill", function(d) { return color(d.rate = unemployment.get(d.id)); })
          .attr("d", path)
        .append("title")
          .text(function(d) { return d.rate + "%"; });

      svg.append("path")
          .datum(topojson.mesh(us, us[0].objects.states, function(a, b) { return a !== b; }))
          .attr("class", "states")
          .attr("d", path);
      });

  </script>



  </body>

</html>