导入 Jupyter Notebook 时,D3 4.0+ 不会创建全局 d3 变量

D3 4.0+ does not create a global d3 variable when imported into Jupyter Notebook

以下将失败并显示 JavaScript ReferenceError:

from IPython.display import HTML, display

display(HTML("""
<script src="https://d3js.org/d3.v4.js"></script>

<script>
console.log(d3);
</script>
"""))

这是为什么?

等效的 D3 版本 3.x 可以使用(尽管是第二次尝试,对我来说):

from IPython.display import HTML, display

display(HTML("""
<script src="https://d3js.org/d3.v3.js"></script>

<script>
console.log(d3);
</script>
"""))

This 是我能找到的与此主题最相关的 question/answer。

我这里有一个解决方案:

http://makeyourowntextminingtoolkit.blogspot.co.uk/2016/09/interactive-d3v4js-in-jupyter-notebook.html

基本上你需要使用 require.js .. 这已经可以通过笔记本自己的基础设施获得。

这原来是由于 d3 导出自身的方式发生了内部变化。 3.x d3 的分支版本将其所有内部结构导出为全局变量 (source code); 4.x branch versions no longer do that (source code)。现在需要一个包管理器(如 require.js),而导出则通过管道传输到它。

更多详细信息在 requisite GitHub issue

你现在应该做的是:

<script src="scripts/require.js"></script>
<script>var d3 = require('d3')</script>

在那之后,一切都应该按预期工作。