javascript - d3 的 key 函数可以处理列表元素吗?

标签 javascript d3.js charts

我有一个 CSV 文件,其中包含一段时间内出版的同人小说。它看起来像:

id,published_date,characters
1,2017-01-01,'['Joe','Bob','Mary']'
2,2017-01-02,'['Mary']'
3,2017-01-02,'['Bob','Mary']'

我在 published_date 之前编写了一个关键函数,但现在我想看看我是否可以为 characters 编写一个关键函数。因此,对于第一行,Joe、Bob 和 Mary 都是具有值 2017-01-01 的键,然后在第二行中是 2017-01-02将被添加到 Mary 的 key 中。最后,我想在 published_date 上做一个 rollup,以便统计每个日期出版的关于 Mary 的同人小说的数量。我认为最终数据看起来像这样:

{
 Bob: {2017-01-01: 1}, {2017-01-02: 1},
 Joe: {2017-01-01: 1},
 Mary: {2017-01-01: 1}, {2017-01-02: 2} 
}

所以对于 published_date,我的代码如下所示:

var dates = d3.nest()
              .key(function(d) { return parseDate(d.published_date); })
              .rollup(function(v) { return v.length; })
              .entries(csv_data);

如果我的 characters 列不是列表,那么我相信这会起作用:

var dates = d3.nest()
              .key(function(d) { return d.characters; }) // key by character
              .key(function(d) { return parseDate(d.published_date); })
              .rollup(function(v) { return v.length; })
              .entries(csv_data);

有没有办法可以更改 key(function(d) { return d.characters; }) 以实际创建多个键?

谢谢!

最佳答案

分解数据,您就得到了正确的答案。

var csv = `id,published_date,characters
  1,2017-01-01,"[Joe,Bob,Mary]"
  2,2017-01-02,"[Mary]"
  3,2017-01-02,"[Bob,Mary]"`;

var csvData = d3.csvParse(csv, function(r) {
  return {
    id: +r.id,
    publishedDate: new Date(r.published_date),
    characters: r.characters.slice(1,-1).split(",")
  };
});

var data = [];
csvData.forEach(function(r) {
  r.characters.forEach(function(c) {
    data.push({
      id: r.id,
      publishedDate: r.publishedDate,
      character: c
    });
  });
});

现在这应该按照您希望的方式工作。

var nested = d3.nest()
  .key(function(d) { return d.character; })
  .key(function(d) { return d.publishedDate; })
  .rollup(function(v) { return v.length })
  .entries(data);

关于javascript - d3 的 key 函数可以处理列表元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45614741/

相关文章:

r - 使用 plotly 过滤链接 View 中的图例

javascript - 在Highcharts中,如何在 "Bar"图表类型下反转y轴?

javascript - 自动为堆叠条形图选择颜色

javascript - jQuery AJAX 没有得到 PHP 的响应

javascript - 如何正确地将 Angular Universal 网站部署到特定路径?

javascript - IE 中的自关闭弹出窗口——如何获得正确的 onBlur 行为?

javascript - Html 按钮无法与 JavaScript 配合使用

php - 泳道图的自动布局

javascript - 如何在 d3.js 中创建动态条形图?

javascript - 防止缩放事件中的 d3 平移值超出范围