【问题标题】:Using an associative array as data for D3使用关联数组作为 D3 的数据
【发布时间】:2012-03-24 06:57:05
【问题描述】:

我有一个非常简单的 D3 示例,它首先将数据读入关联数组,然后将其显示在条形图中。

不过,我似乎无法使用此方法显示任何内容。相反,我必须在两者之间插入一个任务:将数据读入关联数组,将该数据复制到一个简单数组中,然后使用该简单数组显示条形图。

chart.selectAll("div")
     .data(genreAssociative)
     .enter().append("div")
     .style("width", function(d) { return d * 10 + "px"; })
     .text(function(d) { return d; });

上述方法不起作用。

genreSimple = [];
for (var genre in genreAssociative) genreSimple.push(genreAssociative[genre]);         
chart.selectAll("div")
     .data(genreSimple)
     .enter().append("div")
     .style("width", function(d) { return d * 10 + "px"; })
     .text(function(d) { return d; });

以上内容;使用一个简单的数组作为中介。有没有一种特殊的方法来迭代关联数组而不是标准数组?

【问题讨论】:

  • 从包含的信息中可以看出,chart.data 函数不接受 javascript 对象(又名“关联数组”)。如果是这种情况,那么您别无选择,只能转换为数组。
  • 它们在 JavaScript 中不称为关联数组。我倾向于挂断这个术语,因为通常使用关联数组的人会将其声明为数组,例如 PHP。

标签: javascript d3.js associative-array


【解决方案1】:

您可以使用函数d3.valuesd3.entries 直接处理关联数组。您只需要在设置属性的函数中考虑到它(例如function(d) { return d.value; })。

【讨论】:

  • 这个解决方案并没有完全奏效,但它为我指明了正确的方向。通过将“.data(genreAssociative)”替换为“.data(d3.values(genreAssociative))”,我能够正确显示数据,但不幸的是这会丢失关键信息(因此我无法将密钥显示为文本,因为示例)。
  • 您是否尝试过使用.data(d3.entries(genreAssociative))
  • 是的,但是我可以访问键而不是值。在我的条形图中,我想要条形长度的值和标签的键。
  • d3.entries() 返回一个数组,其中每个元素都有一个 key 和一个 value 成员。您应该能够以这种方式获取键和值。
  • 就是这样!非常感谢!这将教会我下次仔细阅读文档。
【解决方案2】:

我发现为了使条形图生成工作良好,以下格式效果最好。它基于 D3 后解析的 CSV 格式。

var dataSet1 = [
  {xCoordinate: "Legend String 1", magnitude: 54, link: "http://www.if4it.com"},
  {xCoordinate: "Legend String 2", magnitude: 21, link: "http://www.if4it.com/glossary.html"},
  {xCoordinate: "Legend String 3", magnitude: 31, link: "http://www.if4it.com/resources.html"},
  {xCoordinate: "Legend String 4", magnitude: 14, link: "http://www.if4it.com/taxonomy.html"},
  {xCoordinate: "Legend String 5", magnitude: 19, link: "http://www.if4it.com/disciplines.html"},
  {xCoordinate: "Legend String 6", magnitude: 47, link: "http://www.if4it.com"},
  {xCoordinate: "Legend String 7", magnitude: 27, link: "http://www.if4it.com/glossary.html"}];

该格式允许坐标、幅度、图例和 html 链接相互关联。

可以在以下位置找到一个工作示例:http://bl.ocks.org/2164562

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 2016-07-03
    • 1970-01-01
    相关资源
    最近更新 更多