【问题标题】:Group and count json data in queue() in d3.js在 d3.js 中的 queue() 中对 json 数据进行分组和计数
【发布时间】:2019-02-24 13:18:44
【问题描述】:

我正在尝试更改获取 D3 地图的 json 文件的格式。原始来源是palewire 的World Choropleth

编辑:工作代码感谢 Plunker 中的以下答案: http://embed.plnkr.co/JYTATyrksAg3OJ0scHAp/

原始 json 是嵌套格式,每个值都有一个计数:

  {
    "id": "IQ-G02-D009",
    "rate": "1"
  },
  {
    "id": "IQ-G05-D030",
    "rate": "4"
  },
  {
    "id": "IQ-G07-D047",
    "rate": "5"
  }
]

新的 json 将使用平面格式,例如:

[
  {
    "id": "IQ-G02-D009"
  },
  {
    "id": "IQ-G05-D030"
  },
  {
    "id": "IQ-G05-D030"
  },
  {
    "id": "IQ-G05-D047"
  },
  {
    "id": "IQ-G07-D047"
  }
]

似乎使用 rollup 和 nest 函数可以让新的 json 以与前一个类似的形式获得,但我在执行 queue() 时遇到了困难。

似乎应该在 .defer 级别实现汇总:

queue()
    .defer(d3.json, "map.json")
    .defer(d3.json, "data.json")
    .await(ready);

可以直接在队列中使用嵌套和汇总功能吗?

【问题讨论】:

  • 这个答案可能对你有帮助stackoverflow.com/questions/34631591/…
  • 现在查看您的源代码,您可以在获取数据后,在您的就绪函数中使用嵌套和汇总。您可以使用延迟参数应用汇总并嵌套在队列中,但最终会出现在您的等待函数中。
  • 非常感谢,确实 ready 函数似乎是一个更合适的地方。我现在正在尝试在其中添加嵌套和汇总,但没有运气。在更新的 Plunker 中查看 cmets:embed.plnkr.co/JYTATyrksAg3OJ0scHAp
  • 在您的 plnkr 上,activities 没有 rate 密钥,所以这可能是您的汇总不起作用

标签: javascript json d3.js


【解决方案1】:

你有一些错字对你不利。正如 cal_br_mar 所说,您的问题的一般答案是:在加载数据时应用嵌套和汇总。所以:

queue()
  .defer(d3.json, "map.json")
  .defer(d3.json, "data.json")
  .await(ready)

function ready(error, country, activities) {
   activities = d3.nest()
     .key(function(d) {
       return d.id;
     })
     .rollup(function(v) {
       return v.length;
     })
     .entries(activities);  
}

您的最后一行有错字:应该是 activities,而不是 expenses(我猜是复制和粘贴错误)。

在后面的代码中应该是:

activities.forEach(function(d) {
  rateById[d.key] = +d.values;
});

nest()rollup 将您的数据放入 keyvalues 属性中,正如您在嵌套数据的控制台输出中看到的那样:

[{"key":"IQ-G02-D009","values":1},{"key":"IQ-G05-D030","values":2},{"key":"IQ-G05-D047","values":1},{"key":"IQ-G07-D047","values":1}]

更改这些字段,您应该没问题。

【讨论】:

  • 这很好用,Plunker 现在更新了工作代码,非常感谢。
猜你喜欢
  • 2022-07-27
  • 2022-01-13
  • 1970-01-01
  • 2015-09-24
  • 2021-09-07
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多