导入 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。
我这里有一个解决方案:
基本上你需要使用 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>
在那之后,一切都应该按预期工作。
以下将失败并显示 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。
我这里有一个解决方案:
基本上你需要使用 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>
在那之后,一切都应该按预期工作。