如何从nbviewer可视化的ipython笔记本中的单元格中隐藏代码?

问题描述 投票:138回答:16

我有一个使用NBviewer可视化的ipython / jupyter笔记本。

如何隐藏NBviewer渲染的笔记本中的所有代码,以便仅显示代码输出(例如,图和表格)和降价单元格?

javascript ipython ipython-notebook
16个回答
218
投票
from IPython.display import HTML

HTML('''<script>
code_show=true; 
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
} 
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>''')

3
投票

将单元格转换为Markdown并使用HTML5 <details>标记,如joyrexus所示的示例:


1
投票

这是p3trus建议的另一种解决方案:


1
投票

接受的解决方案在julia Jupyter / IJulia中也可以进行以下修改:


0
投票

((纸)打印或另存为HTML


0
投票

使用以上所有解决方案,即使您隐藏了代码,仍然会在您不想要的图形上方得到[<matplotlib.lines.Line2D at 0x128514278>]废话。


0
投票

Here是一篇不错的文章(与@Ken发表的文章相同),关于如何完善Jpuyter(新的IPython)笔记本进行演示。有无数种使用JS,HTML和CSS扩展Jupyter的方法,包括通过javascript与笔记本的python内核进行通信的能力。 %%HTML%%javascript有魔术装饰器,因此您可以自己在单元格中执行以下操作:


0
投票

使用浏览器的控制台非常容易的解决方案。您将此复制到浏览器控制台中,然后按Enter:


62
投票

现在可以从版本5.2.1开始直接从nbconvert:可以使用内置template exporter exclude options过滤内容。例如:

jupyter nbconvert --to pdf --TemplateExporter.exclude_input=True my_notebook.ipynb

将排除“输入代码”单元格,即代码本身。 Similar options的存在是为了排除提示,降价单元格或输出,或排除输入和输出。

(这些选项应该与输出格式无关。)


19
投票

我将使用nbextensionshide_input_all)中的https://github.com/ipython-contrib/IPython-notebook-extensions。方法如下:

  1. 找出您的IPython目录在哪里:

    from IPython.utils.path import get_ipython_dir
    print get_ipython_dir()
    
  2. 下载nbextensions并将其移至IPython目录。

  3. 编辑您的custom.js文件在IPython目录中的某个位置(我的位于profile_default / static / custom中,类似于nbextensions目录中的custom.example.js

  4. 将此行添加到custom.js

    IPython.load_extensions('usability/hide_input_all')
    

无论工作簿如何,IPython Notebook现在都将具有一个用于切换代码单元的按钮。


15
投票

最新的IPython Notebook版本不再允许在markdown单元中执行javascript,因此,使用以下javascript代码添加新的markdown单元将无法再隐藏您的代码单元(请参阅this link

如下更改〜/ .ipython / profile_default / static / custom / custom.js:

code_show=true;
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
}

$([IPython.events]).on("app_initialized.NotebookApp", function () {
  $("#view_menu").append("<li id=\"toggle_toolbar\" title=\"Show/Hide code cells\"><a href=\"javascript:code_toggle()\">Toggle Code Cells</a></li>")
});

11
投票

我编写了一些实现此目的的代码,并添加了一个按钮来切换代码的​​可见性。

以下内容进入笔记本顶部的代码单元:

from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di # Example: di.display_html('<h3>%s:</h3>' % str, raw=True)

# This line will hide code by default when the notebook is exported as HTML
di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)

# This line will add a button to toggle visibility of code blocks, for use with the HTML export version
di.display_html('''<button onclick="jQuery('.input_area').toggle(); jQuery('.prompt').toggle();">Toggle code</button>''', raw=True)

您可以看到an example of how this looks in NBviewer here

更新:对于Jupyter中的Markdown单元,这将具有一些有趣的行为,但是在笔记本的HTML导出版本中可以正常工作。


8
投票

提供了一个不错的解决方案here非常适合导出到HTML的笔记本。该网站甚至链接回此SO帖子,但我在这里看不到Chris的解决方案! (克里斯,你在哪里?)

这基本上与从名单上接受的答案相同,但是它具有将切换代码本身隐藏在导出的HTML中的优点。我也喜欢这种方法,避免了使用IPython HTML函数的需要。

要实现此解决方案,请将以下代码添加到笔记本顶部的“原始NBConvert”单元中:

<script>
  function code_toggle() {
    if (code_shown){
      $('div.input').hide('500');
      $('#toggleButton').val('Show Code')
    } else {
      $('div.input').show('500');
      $('#toggleButton').val('Hide Code')
    }
    code_shown = !code_shown
  }

  $( document ).ready(function(){
    code_shown=false;
    $('div.input').hide()
  });
</script>
<form action="javascript:code_toggle()">
  <input type="submit" id="toggleButton" value="Show Code">
</form>

然后只需将笔记本导出为HTML。笔记本顶部将有一个切换按钮,以显示或隐藏代码。

克里斯也提供了一个例子here

我可以验证它在Jupyter 5.0.0中是否有效

更新

:显示/隐藏div.prompt元素以及div.input元素也很方便。这将删除In [##]:Out: [##]文本,并减少左侧的边距。

7
投票

为了更好地显示打印的文档或报告,我们还需要删除按钮,并具有显示或隐藏某些代码块的功能。这是我使用的方法(只需将其复制粘贴到您的第一个单元格中即可):


7
投票

这可以通过使用IPython ToggleButton小部件和少量JavaScript来完成。以下代码应放在文档顶部的代码单元中:


4
投票

这将呈现IPython笔记本输出。但是,您将注意到能够查看输入代码。您可以复制一个笔记本,然后在需要与不需要查看代码的人共享时添加此代码。

© www.soinside.com 2019 - 2024. All rights reserved.