d3.js-来自同一JSON对象不同部分的同一页面上的多个图表
d3.js - multiple charts on same page from different parts of same JSON object
我搜索了很多遍,都没能找出我的代码出了什么问题。如果我遗漏了一些显而易见的东西,我深表歉意。
我有一个JSON对象如下:
var data={
"by_date":[
{"date":"2014-01-01", "count":10},
{"date":"2014-02-01", "count":20},
{"date":"2014-03-01", "count":30},
{"date":"2014-04-01", "count":15},
{"date":"2014-05-01", "count":20}
],
"by_location": {
"name":"World","children":[
{
"name":"United States", "children":[{"name":"New York", "children":[{"name":"Albany","count":5}, {"name":"NYC","count":5}]}]
},
{
"name":"Canda", "children":[
{
"name":"Alberta", "children":[{"name":"Edmonton","count":5},{"name":"Calgary","count":5}]
},
{
"name":"British Columbia", "children":[{"name":"Victoria","count":2},{"name":"Vancouver","count":8}]
}
]
},
{
"name":"China", "children":[{"name":"Beijing","count":30}]
},
{
"name":"India", "children":[{"name":"Bangalore","count":15}]
},
{
"name":"Germany", "children":[{"name":"Frankfurt","count":20}]
}
]
}
};
我想在同一HTML页面上显示一个使用data.by_date
数据的折线图和data.by_location
的可缩放circlepack。我有两个Javascript函数by_date
,用于创建折线图,by_location
,用于创建circlepack,它们的代码与Mike Bostock的折线图和可缩放circlepack示例完全相同,我如下调用它们:
by_date(data.by_date);
by_location(data.by_location); // Creates circlepack, but zoom doesn't work.
问题是,虽然折线图和circlepack都已创建并显示在页面上,但缩放功能在circlepack上不起作用。我得到以下错误:
Uncaught TypeError: Cannot read property 'parent' of undefined
但是,如果我不调用by_date
,而只调用by_location
,它就可以很好地工作。
//by_date(data.by_date);
by_location(data.by_location); // Zoom works great now!
既然by_date
只使用data.by_date
,甚至不接触data.by_location
,为什么注释掉它会让by_location
正常工作?
以下是演示问题的技巧:
线条和圆形包装(圆形包装不缩放):http://jsfiddle.net/xk5aqf8t/6/
折线图函数by_date
评论道(缩放效果良好):http://jsfiddle.net/38sayeqa/
请注意,这两个fiddle之间仅有的区别是对by_date
的注释调用。
非常感谢您的帮助。提前感谢!
本例中的问题是,在缩放转换中,您选择了文档中的所有text
元素,包括元素绑定数据没有任何parent
属性的折线图(因此出现错误消息)。
修复很容易。只需将您的转换选择约束到当前图表即可。在您已经选择了文本元素的情况下,您可以简单地重用它,如下所示:
// Let's keep our initial selection in the text variable:
var text = svg.selectAll('text').data(nodes);
text.enter()... // the entering selection is a subselection, so we keep it separate
// Create a new transition on the existing selection of text nodes
var transition = text.transition().duration(...); // the transition will reuse `text` selection
transition.filter(...); // don't subselect anything here
这是一个演示。
- 如何获取不属于我项目的上一页的URL
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 使用Booklet Jquery插件,我如何验证最后一页是否显示
- 如何在一页网站中使用PHP重定向到一个页面
- Javascript并不是显示在每一页上
- 如何在一页上显示多个Highcharts图表
- jQuery分页下一页和上一页按钮在点击零或超过最后一页后失败
- 如何为AngularJS制作智能表中第一页和最后一页的跳过按钮
- Bootstrap一页导航Fluid网站最小化问题
- 返回上一页时,Javascript仍处于活动状态
- 将jsp重定向到servlet,然后重定向到下一页
- 如何在重定向到asp.net中单击按钮的下一页之前应用javascript警报
- 传递表单值并移动到另一页
- 如何获取数组详细信息另一页
- 警报中的window.location必须重定向到上一页
- 一页签出在Magento版本1.7.0.2中不起作用
- 获取/保留上一页's具有SmoothState的URL
- 简单的一页水平滚动
- 翻开一页'的javascript变量更改为提要
- 记住下一页的段塞