4

我是 d3 新手,我一直在尝试自定义 Streamgraph 示例(http://mbostock.github.com/d3/ex/stream.html):

在此处输入图像描述

我遇到了一些问题:

我想为流中的每个图层分配一个自定义数据属性(例如,让我们说它是一个名为“类型”的标签),以便当您将鼠标悬停在该图层上时,会出现一个弹出框,其中列出了“类型”那一层。

当我将数据源输入图表时,我使用以下代码:

      vis.selectAll("path")
        .data(data0)
      .enter().append("path")

该图似乎只采用以下格式的数据:

            [
                 [
                    {
                        "x": 0,
                        "y": 91,
                        "y0": 1.11
                    },
                    {
                        "x": 1,
                        "y": 290,
                        "y0": 1.11
                    }
                ],  
                [
                    {
                        "x": 0,
                        "y": 9,
                        "y0": 1.11
                    },
                    {
                        "x": 1,
                        "y": 49,
                        "y0": 1.11
                    }
                 ]
             ]

上面的每个子数组对应于流图中的一个层。

如何将数据传递给允许我为每一层添加额外的“类型”属性的图表?

基本上,当我参考图层的数据时,我可以输入类似 d.type 的内容并提取该属性?

我最初想出了一个非常骇人听闻的方法来做到这一点:

                [
                    {
                        "x": 0,
                        "y": 9,
                        "y0": 1.11,
                        "type": "listings"
                    },
                    {
                        "x": 1,
                        "y": 49,
                        "y0": 1.11,
                    }
                 ]

然后我通过说 d[0].type 在层数据中引用它,但这似乎不是正确的方法。

4

1 回答 1

3

使用stack.values,然后用该层的一些附加数据包装每个层的数据点。您的数据将如下所示:

[
  {
    "type": "apples",
    "values": [
      { "x": 0, "y":  91},
      { "x": 1, "y": 290}
    ]
  },
  {  
    "type": "oranges",
    "values": [
      { "x": 0, "y":  9},
      { "x": 1, "y": 49}
    ]
  }
]

堆栈布局如下:

var stack = d3.layout.stack()
    .offset("wiggle")
    .values(function(d) { return d.values; });
于 2012-05-10T03:05:05.900 回答