- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是d3.js的新手。我发现有两种方法可以绘制对象-SVG和Canvas。
我的用例是在<100个节点和边缘附近。我已经尝试了一些使用 Canvas 的示例,它看起来很棒。
我看到the difference between SVG and Canvas周围有一个SO帖子。
两者都适合我使用,但是,我倾向于使用 Canvas (因为我已经没有几个示例可以工作了)。如果我在d3.js上下文中缺少任何内容,请纠正我吗?
最佳答案
链接的问题/答案中列出的差异说明了svg和 Canvas ( vector /光栅等)之间的一般差异。但是,对于d3,这些差异还具有其他含义,尤其是考虑到d3的核心部分是数据绑定(bind)。
数据绑定(bind)
d3的最主要特征可能是数据绑定(bind)。 Mike Bostock指出,一旦将数据加入元素,他就需要创建d3:
The defining moment was when I got the data-join working for the first time. It was magic. I wasn’t even sure I understood how it worked, but it was a blast to use. I realized there could be a practical tool for visualization that didn’t needlessly restrict the types of visualizations you could make. link
data.forEach(function(d) {
// drawing instructions:
context.beginPath()....
})
// container for dummy elements:
var faux = d3.select(document.createElement("custom"));
// treat as any other DOM elements:
var bars = faux.selectAll(".bar").data(data).enter()....
bars.each(function() {
var selection = d3.select(this);
context.beginPath();
context.fillRect(selection.attr("x"), selection.attr("y")...
...
})
var canvas = d3.select("body")
.append("canvas")
.attr("width", 600)
.attr("height", 200);
var context = canvas.node().getContext("2d");
var data = [1,2,3,4,5];
// container for dummy elements:
var faux = d3.select(document.createElement("custom"));
// normal update exit selection with dummy elements:
function update() {
// modify data:
manipulateData();
var selection = faux.selectAll("circle")
.data(data, function(d) { return d;});
var exiting = selection.exit().size();
var exit = selection.exit()
.transition()
.attr("r",0)
.attr("cy", 70)
.attr("fill","white")
.duration(1200)
.remove();
var enter = selection.enter()
.append("circle")
.attr("cx", function(d,i) {
return (i + exiting) * 20 + 20;
})
.attr("cy", 50)
.attr("r", 0)
.attr("fill",function(d) { return ["orange","steelblue","crimson","violet","yellow"][d%5]; });
enter.transition()
.attr("r", 8)
.attr("cx", function(d,i) {
return i * 20 + 20;
})
.duration(1200);
selection
.transition()
.attr("cx", function(d,i) {
return i * 20 + 20;
})
.duration(1200);
}
// update every 1.3 seconds
setInterval(update,1300);
// rendering function, called repeatedly:
function render() {
context.clearRect(0, 0, 600, 200);
faux.selectAll("circle").each(function() {
var sel = d3.select(this);
context.beginPath();
context.arc(sel.attr("cx"),sel.attr("cy"),sel.attr("r"),0,2*Math.PI);
context.fillStyle = sel.attr("fill");
context.fill();
context.stroke();
})
window.requestAnimationFrame(render)
}
window.requestAnimationFrame(render)
// to manipulate data:
var index = 6; // to keep track of elements.
function manipulateData() {
data.forEach(function(d,i) {
var r = Math.random();
if (r < 0.5 && data.length > 1) {
data.splice(i,1);
}
else {
data.push(index++);
}
})
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.10.0/d3.min.js"></script>
.find
方法,并使用该方法找到最接近鼠标单击的节点,然后将拖动主题设置到该节点。
.find
方法查找距事件最近的节点(对于点,圆).find
方法查找距事件最近的节点(对于点,圆,主要是在强制布局的上下文中)selection.on()
的事件监听器可以使用或不使用数据绑定(bind),上面提到了鼠标交互的挑战。
关于d3.js - dv.js中svg和canvas之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50141324/
我正在寻找一种从 DV AVI 文件中检索或提取录制时间戳的方法。时间戳应该是 AVI 文件元数据的一部分。这些文件最初是从 DV 导入到 PC 并采用 AVI 包装器中的 DV 格式。 提供 API
这个问题在这里已经有了答案: Xerces error: org.apache.xerces.impl.dv.dtd.DTDDVFactoryImpl (2 个答案) 关闭 5 年前。 我正在使用
我是d3.js的新手。我发现有两种方法可以绘制对象-SVG和Canvas。 我的用例是在 1) { data.splice(i,1); } else { dat
在尝试确定自变量对因变量方差的解释程度时,我应该采用哪些统计技术? 为了进一步了解 - 我被要求用 Python 开发一个模型,目的是检查预测变量对响应变量的影响程度。我通常专注于开发用于预测目的的模
我有一个带有 WHM/Cpanel 的小型专用服务器,我在那里运行一些 wordpress 博客,例如 1 个博客是关于特定的仓鼠以及人们应该如何照顾它们而另一个博客是关于 body 饮食的,什么是某
此问题特定于 MediaTemple 专用虚拟服务器。 当我通过 Plesk 面板添加新虚拟主机时,虚拟主机配置保存在哪里?没有/etc/httpd/conf/httpd-vhosts.conf 并且
我正在接管一个网站。之前的开发人员决定使用cube.dev构建 KPI 页面。但我对此一无所知。 他向我展示了 KPI 页面运行后的情况。但现在,当我在我这边启动它时( https://jsaddin
我有一个 MediaTemple dv 服务器和一个使用 Git 版本化的项目,我想部署它。情况如下: 我在本地机器上开发网站。 我在本地 git 仓库 (repoA) 上提交更改 我通过 Tower
我对 RED5 很感兴趣,但不幸的是我找不到任何使用外部源提供它的示例。我知道 RTSP 正在开发中,但我正在考虑(命名)管道或类似的东西。据我了解,还有一个名为 xuggle 的项目,它是 Java
您好,我正在尝试通过 pecl 在 mediatemple DV 服务器中安装 APC,但出现此错误。有人可以帮忙吗? [root@klph-jyj2 ~]# mkdir -p /root/chroo
我已经有一个 DV(域验证)证书 SSL 我想将我的证书上传到 cloudflare。但是,我想知道,cloudflare是否支持DV证书?如果 cloudflare 支持,我将购买商业计划帐户 有没
我正在做一个需要转换 mpg、avi、wmv 格式的项目。供应商要求格式为 DV AVI 类型 1。这是 Windows Movie Maker 在从摄像机捕获时提供的格式。 对于一些假设用户正在从设
我有一个编码为 MXF 的 DV 文件,我想转码为 h264。对读取好的文件运行 ffmpeg 并理解流但不会写入 h264 文件。似乎所有流都正确,我可以确认视频和音频流的属性。 我只是不明白为什么
任何人都尝试在 mediatemple dv 服务器上为他们的 rails 应用程序设置 nginx 和 unicorn 吗?你记录了吗? 最佳答案 它不是特定于 mediatemple dv 但你绝
我有一个提供 .apk 文件的 nginx。对于我的域名,nginx 配置为提供由 Network Solutions DV Server 2 CA 签署的 SSL 证书,该证书又由 AddTrust
我最近从 SSL 123 DV Thawte Inc 为我客户的一个域购买了 SSL。安装证书后,我使用 Thawte 提供的加密检查程序检查了域。 我收到一条警告,指出该站点对 BEAST 攻击漏洞
我已经安装在我的DV上了 # convert -version Version: ImageMagick 6.7.4-0 2011-12-21 Q16 http://www.imagemagick.o
我正在尝试在 mediatemple (dv) 上部署我的第一个 Rails 应用程序,但我没有任何运气。 我正在尝试使用 phusion 乘客,所以我转到 http://www.modrails.c
我正在开发一个单页网站,其中有多个 div 显示:无; 我知道如何使它们在点击时可见和隐藏,但我想在有人更改 URL 时显示或隐藏 div $(document).ready(function(){
我正在尝试在函数中使用 ez 包中的 ezANOVA,在该函数中我希望允许使用参数指定 dv。通常,ezANOVA 会接受列变量作为符号或字符串(请参阅下面的“此方法”)。但是,尝试为 ezANOVA
我是一名优秀的程序员,十分优秀!