Tag: d3.js

快速响应的交互式图表/graphics:SVG,Canvas,其他?

我正在尝试select正确的技术来更新一个基本上呈现可缩放,可移动graphics中的数千个点的项目。 目前使用Protovis的实施效果不佳。 看看这里: http://www.planethunters.org/classify 完全缩小大约有2000点。 尝试使用底部的手柄放大一点,并拖动它平移。 你会发现它是非常不稳定的,你的CPU使用率可能会在一个内核上达到100%,除非你有一台非常快的计算机。 对焦点区域的每一个改变都会调用protovis来重绘,这相当慢,而且在绘制更多的点时会变得更糟。 我想对界面进行一些更新,并将底层的可视化技术更改为对animation和交互更加敏感。 从下面的文章中,似乎可以select另一种基于SVG的库或基于canvas的库: How to Choose Between Canvas and SVG 从Protovis发展而来的d3.js是基于SVG的, 在渲染animation方面应该更好 。 不过,我很怀疑它的性能上限是多less。 出于这个原因,我还在考虑使用像KineticJS这样的基于canvas的库进行更彻底的检修。 然而,在我使用这种或那种方法过度使用之前,我想听听有人用这么多的数据完成了一个类似的Web应用程序,并得到他们的意见。 最重要的是性能,次要的重点是易于添加其他交互function和编程animation。 一次可能不会超过2000点,每个点都有小错误。 放大,缩小和平移需要平滑。 如果最近的SVG库在这方面比较体面,那么使用d3的难易程度可能会超过KineticJS的增加设置等。但是如果使用canvas有很大的性能优势,特别是对于电脑速度较慢的用户,那么我肯定会喜欢这样。 由使用SVG的NYTime制作的应用程序示例,但仍可以stream畅地animation: http ://www.nytimes.com/interactive/2012/05/17/business/dealbook/how-the-facebook-offering-compares.html 。 如果我可以得到这样的性能,而不必编写自己的canvas代码,那么我可能会selectSVG。 我注意到一些用户已经使用了与canvas渲染相结合的d3.js混合操作 。 不过,我无法在网上find很多关于这个post的文档,也没有联系到这个post的OP。 如果任何人有任何这样的DOM到canvas( 演示 , 代码 )实现的经验,我想也听到你的。 这似乎是能够操纵数据和自定义控制如何呈现它(以及因此性能)的一个很好的混合体,但是我想知道是否必须将所有内容加载到DOM仍然会减慢速度。 我知道有一些类似于这个问题的现存问题,但是他们中的任何一个都没有问过同样的问题。 谢谢你的帮助。 后续 :我最终使用的实现是在https://github.com/zooniverse/LightCurves

如何删除或replaceSVG内容?

我有一段JavaScript代码,它创build(使用D3.js)包含图表的svg元素。 我想根据来自使用AJAX的Web服务的新数据更新图表,问题是每次点击更新button时,它会生成一个新的svg ,所以我想删除旧的或更新其内容。 这里是我创buildsvg的JavaScript函数的一个片段: var svg = d3.select("body") .append("svg") .attr("width", w) .attr("height", h); 如何删除旧的svg元素或至lessreplace其内容?

D3 datum与数据有什么不同?

有人可以解释D3.js中的datum()和data()之间的区别吗? 我看到两个都在使用,我不知道为什么你应该select一个呢?

在D3力定向布局中修复节点位置

我希望我的强制布局中的一些节点能够忽略这个力,并且根据这个节点的属性保持在固定的位置上,同时仍然能够被拖拽并且排斥其他节点并保持它们的连接线。 我认为这将是如此简单: force.on("tick", function() { vis.selectAll("g.node") .attr("transform", function(d) { return (d.someAttribute == true) ? "translate(" + d.xcoordFromAttribute + "," + d.ycoordFromAttribute +")" : "translate(" + dx + "," + dy + ")" }); }); 我也尝试过手动设置节点的x和y属性,但是如果节点受到这个力的影响,链接将继续浮动到节点所在的位置。 很明显,我对这个应该如何工作有一个基本的误解,所以有人可能会指出我的一个例子,其中一些节点固定在他们的位置(但仍然可拖动),其余的节点都是围绕着类似于力的方向,所有的链接还在工作?

如何转换为D3的JSON格式?

虽然遵循大量的D3示例,但数据通常采用flare.json中给出的格式进行格式化 : { "name": "flare", "children": [ { "name": "analytics", "children": [ { "name": "cluster", "children": [ {"name": "AgglomerativeCluster", "size": 3938}, : 我有一个邻接表如下: A1 A2 A2 A3 A2 A4 我想要转换为上面的格式。 目前,我在服务器端做到这一点,但有没有办法使用D3的function来实现这一点? 我在这里find了一个,但是这个方法似乎需要修改d3核心库,由于可维护性,我不赞成。 有什么build议么?

弧外标签(饼图)d3.js

我是d3.js的新手,我试图做一个饼图,我只有一个问题:我不能在我的弧线之外得到我的标签…标签的位置是arc.centroid arcs.append("svg:text") .attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; }) .attr("text-anchor", "middle") 谁能帮助我呢?

创build链接到csv文件的表格

我正在尝试使用d3创build一个链接到*.csv文件的表格,但是我得到的只是一个空白的网页。 即使克里米亚的例子,我得到一个空白页面。 我将不胜感激,指导或展示一个我正在做的错误的实例或build议。

D3js:自动标签放置,以避免重叠? (强制排斥)

如何在地图的标签上应用排斥力,自动find合适的位置? 博斯托克“让我们来做一个地图” 迈克·博斯托克的让我们做一个地图 (截图如下)。 默认情况下,标签放在点的坐标和多边形/多边形的path.centroid(d) +一个简单的左或右alignment,所以他们经常input冲突。 手工制作的标签展示位置 我遇到的一个改进就是需要添加一个人工修改的IF ,并根据需要添加如下内容: .attr("dy", function(d){ if(d.properties.name==="Berlin") {return ".9em"} }) 随着标签数量的增加,整体变得越来越肮脏: //places's labels: point objects svg.selectAll(".place-label") .data(topojson.object(de, de.objects.places).geometries) .enter().append("text") .attr("class", "place-label") .attr("transform", function(d) { return "translate(" + projection(d.coordinates) + ")"; }) .attr("dy", ".35em") .text(function(d) { if (d.properties.name!=="Berlin"&&d.properties.name!=="Bremen"){return d.properties.name;} }) .attr("x", function(d) { return d.coordinates[0] > -1 ? 6 : -6; […]

从svg外面的button中点击d3中的一个节点

我已经使用D3创build了一个强制有向图,并在正常的div中显示了节点的id。 我需要突出显示在div中点击了id的节点。 我已经search的节点的id和使用正常的JavaScript尝试点击它,但它不工作。

添加新的节点到强制指导布局

关于Stack Overflow的第一个问题,请耐心等待! 我是d3.js的新手,但是一直都很惊讶于别人能够用它来完成什么……而且我几乎同样惊讶于我自己能够取得的进展。 很显然,我不是在寻找什么,所以我希望这里的善良的灵魂能让我看到光明。 我的意图是做一个可重用的JavaScript函数,它只是做以下几点: 在指定的DOM元素中创build一个空白的强制方向图 允许您添加和删除带标记的图像承载节点到该图表,指定它们之间的连接 我以http://bl.ocks.org/950642为起点,因为这实际上是我想要创build的布局types: 这是我的代码看起来像: <!DOCTYPE html> <html> <head> <script type="text/javascript" src="jquery.min.js"></script> <script type="text/javascript" src="underscore-min.js"></script> <script type="text/javascript" src="d3.v2.min.js"></script> <style type="text/css"> .link { stroke: #ccc; } .nodetext { pointer-events: none; font: 10px sans-serif; } body { width:100%; height:100%; margin:none; padding:none; } #graph { width:500px;height:500px; border:3px solid black;border-radius:12px; margin:auto; } </style> </head> <body> […]