【发布时间】:2014-08-14 19:48:29
【问题描述】:
我正在尝试使用 d3.chart 框架创建多个图表。这似乎是一个常见的用例:d3.chart 的全部意义在于图表是可重用的!如果你能指出一个很棒的例子(:
我通过这个 (https://github.com/misoproject/d3.chart/wiki/quickstart) 教程创建了一个非常基本的“圆形图”。 (我完全复制了代码)。现在我想做的是为几组数据创建一个单独的图表。 我稍微编辑了一下。 在编辑之前,设置我们调用的图表:
var data = [1,3,4,6,10];
var chart = d3.select("body")
.append("svg")
.chart("Circles")
.width(100)
.height(50)
.radius(5);
chart.draw(data);
我尝试将其更改为:
var data = [{key:1, values:[1,3,4,6,10]},
{key:2, values:[5,2,10,8,11]},
{key:3, values:[1,5,9,16,12]}]
var chart = d3.select("body")
.selectAll("chart)
.data(data)
.enter()
.append("svg")
.chart("Circles")
.width(100)
.height(50)
.radius(5);
chart.draw(function(d) { return d.values; });
但这不起作用。你可以在 3 个不同的地方看到一个圆的角,但是 其余部分被切断。但是,如果替换
chart.draw(function(d) { return d.values; });
与
chart.draw([1,3,4,6,10]);
它正确地生成了 3 个圆形图,所有这些都包含一个数据集。当我添加时
chart.draw(function(d) { console.log(d.values) return d.values; });
控制台显示了我试图传递的 3 个数组!我不明白这里发生了什么破坏了代码。它不应该与将实际数组传递给 3 个单独的图表完全相同吗?
这里是 JS bin 设置的链接:http://jsbin.com/jenofovogoke/1/edit?html,js,console,output 随意摆弄它!
代码在底部。
我对 java 脚本和 d3 很陌生,对 d3.chart 完全陌生。任何帮助将不胜感激!
【问题讨论】:
-
我通过链接到 d3.chart 而不是包含代码,稍微清理了那个 bin。见jsbin.com/jenofovogoke/3/edit?html,js,output。如果您打开 浏览器的 JavaScript 控制台,您会看到“错误:
属性 cx="NaN" 的值无效,这可能解释了为什么您的圈子都显示在彼此之上. -
@FrankvanPuffelen 感谢您清理它!但这并没有真正解决我的问题:它没有找到 cx 的原因是因为它没有正确访问数据(cx 依赖于值)。如果您将chart.data的控制台日志放在初始化下的dataBind下方,您可以看到它将数据记录为“function(d){return d.values;}”,就像它是一个字符串一样,而不是记录实际对应于 d.values 的数组。我的问题是为什么它不是/我怎样才能让它正确访问数据。
-
我一直试图弄清楚发生了什么,但没有成功。在某处,您的
xScale似乎中断了。但不幸的是,我找不到发生这种情况的地方。也许这里的其他人运气更好。 -
@FrankvanPuffelen 如果你有兴趣,我想出了答案!不幸的是,d3.chart 的绘图函数只能接受一个数据对象,因此我没有传递一个计算数据对象的函数,而是通过循环并手动设置每个图表的数据。它现在有效! (:耶!现在如果我能弄清楚如何在我要设置的图层中设置 d3 图表图层.. :P
-
我尝试删除数据访问功能,但显然做错了什么。 :-/ 太好了,你想通了,然后回来自我回答。谢谢!
标签: javascript svg d3.js charts nested