javascript - 如何使用 d3js 创建多线图表,并为 nvd3 设置 json 格式?

标签 javascript binding charts d3.js demo

I created a multiple-line chart using nvd3 , 但无法在某些重要方面对其进行修改。我想使用直接的 d3js 来实现我自己的想法,但我正在努力在连接中思考

我需要为每个 d.key 及其对应的 d.values 创建一个路径。

我的数据针对 nvd3 的格式如下(删节)。

[
    {
        "key":"brw-a",
        "values":[
            ["2012-07-11T00:00:00", 0.0 ],
            ["2012-07-11T23:59:59", 0.0 ],
            ["2012-07-05T06:31:47", 0.0 ],
            ["2012-07-05T23:59:59", 0.0 ]
        ]
    },
    {
        "key":"brw-c",
        "values":[
            ["2012-07-11T00:00:00", 0.0 ],
            ["2012-07-07T00:00:00", 2.0 ],
            ["2012-07-05T23:59:59", 4.0 ]
        ]
    }
]

我似乎需要一个内部循环来访问存储在每个 d.values 中的数组。 I have a working example这演示了 d.values 是如何变成一大团无用的。

var p = d3.select("body").selectAll("p")
        .data(data)
      .enter().append("p")
        .text(function(d) {return d.key +":  " + '[' + d.values + ']'})

感觉自己亲近了,和这有关系:

.data(data, function(d) { return d.key; })

更新:我能够手动循环数据以创建所需的效果。也许没有办法通过连接来做到这一点?当然,除了使用出色的 nvd3 库之外。请参阅下面的评论以获取链接。

var body = d3.select("body")

for (i=0; i < data.length; i++) {
    var key = data[i].key
    var values = data[i].values

    body.append("h3")
        .text(key)

    for (j=0; j < values.length; j++) {
        body.append("p")
            .text(values[j][0] + " -- " + values[j][1])
    }

}

最佳答案

关于 .data() 函数,你是对的。但是因为您需要遍历 values 中的元素,所以您需要将其作为嵌套选择的数据传递:

.data(function(d) { return d.values})

你可以试试这个:

var p = d3.select("body").selectAll("p")
        .data(data)
      .enter().append("p")
        .attr("id", function(d) { return d.key})
        .text(function(d) {return d.key})
            .selectAll("span")
                .data(function(d) { return d.values})
                .enter().append("span")
                    .text(function(d) {return d})

产生:

<p id="brw-a">brw-a
    <span>2012-07-05T00:00:00,0</span>
    <span>2012-07-06T23:59:59,1</span>
    <span>2012-07-07T06:31:47,0</span>
    <span>2012-07-08T23:59:59,3</span>
</p>

<p id="brw-c">brw-c
    <span>2012-07-11T00:00:00,0</span>
    <span>2012-07-07T00:00:00,2</span>
    <span>2012-07-05T23:59:59,4</span>
</p>

关于javascript - 如何使用 d3js 创建多线图表,并为 nvd3 设置 json 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11766998/

相关文章:

silverlight - 使用转义字符串格式进行绑定(bind)会破坏 VS IDE 和智能感知

javascript - 如何防止浏览器打开启动 Strapi

javascript - html partials 中的样式标签

silverlight - 如何使用 NotificationObject 在 silverlight mvvm 中刷新绑定(bind)数据

c# - 我想将类的属性绑定(bind)到用户控件中的控件

jquery - 使用多个透明条目创建面积图 (MIT/GNU)

javascript - Chart.js 中的鼠标悬停功能表现奇怪

c# - 在 Windows 应用程序中使用 C# 绘制条形图

javascript - MomentJS 时区问题

javascript - 无法使用 Node.js 将大块数据填充到 mongodb