【问题标题】:d3 canvas brush / selectiond3画布画笔/选择
【发布时间】:2016-08-15 14:21:25
【问题描述】:

我正在努力将一个在 d3 svg 中做的项目移植到 d3 画布,我所拥有的基本上是一个通过刷的焦点+上下文,它是经典示例 http://bl.ocks.org/mbostock/1667367 的衍生产品,而我有一个简单的折线图面积图,但原理完全一样。

现在,我成功地将折线图从 ol'good svg d3 方法转换为新的画布驱动方式。澄清一下:

              ctx.beginPath();
              draw_line.context(ctx)(data);
              ctx.lineWidth = 0.6;
              ctx.strokeStyle = "rgb(26,188,156)";
              ctx.stroke();

这就是我们正在谈论的东西。

现在,由于我在画布域中,我的印象是所有“与 svg 相关”的东西都不再起作用了,因为它们都依赖于从 svg 中提取的“g”对象,因为这就是为什么诸如“刷子”之类的东西似乎不再起作用了,这导致我来到这里。

我已经看到通过滚动和类似的东西缩放的示例(例如 http://bl.ocks.org/jgbos/9752277 ),另外我看到您也可以使用画布轻松检测滚动事件,但保持准确对我来说很棒我以前的方法相同(通过刷子方法的焦点+上下文)

是否有任何解决方法可以在 d3 中使用画布完成工作?

【问题讨论】:

  • d3 画笔是一个用 SVG 创建的 控件,所以要使用它,您需要一些 SVG 组件。你在这里的最终目标是什么?你为什么要离开 SVG?除非您有极其复杂(即内存密集型)的可视化,否则它在很多方面都优于画布。我想你总是可以像在example 中那样混合两者
  • 是的,我最终混合了两者,是的,我需要画布,因为我正在处理大量的数据。只是为了记录,这两种东西的混合真的很痛苦:)
  • 你能不能把你的工作弄得一团糟,因为我面临着同样的问题,因为我搬到了 Canvas,现在我想要通过刷子方法获得焦点+上下文.
  • 您是否在 Canvas 中实现了焦点 + 上下文缩放?

标签: html canvas d3.js svg


【解决方案1】:

这可以通过将可缩放画布与 svg 画笔相结合来完成。

此示例创建一个带缩放且无画笔的画布热图:
http://bl.ocks.org/tommct/8116740
此示例使用带有背景画布的 svg 画笔(蒙娜丽莎直方图):
http://bl.ocks.org/mbostock/0d20834e3d5a46138752f86b9b79727e

【讨论】: