【问题标题】:collapse cell in jupyter notebook在jupyter笔记本中折叠单元格
【发布时间】:2016-01-14 13:25:50
【问题描述】:

我正在使用 ipython Jupyter 笔记本。假设我定义了一个在我的屏幕上占用大量空间的函数。有没有办法折叠单元格?

我希望函数保持执行和可调用,但我想隐藏/折叠单元格以便更好地可视化笔记本。我该怎么做?

【问题讨论】:

  • JupyterLab 自 2019 年以来就有此功能。突出显示一个单元格,然后单击它旁边的蓝色条。您现在会看到它表示为三个点。当您稍后或在其他地方保存并重新打开时,它将受到尊重。还有更多功能和选项,例如View > Collapse All Code,参见herethe link here

标签: python ipython ipython-notebook jupyter


【解决方案1】:

更新

较新的jupyter-lab 是一个更现代、功能更丰富的界面,默认支持单元格折叠。请参阅下面@intsco 的答案

更新 2

由于jupyter-lab 现在也支持扩展,您可以使用Collapsible_Headings 扩展来扩展内置的单元格折叠功能。

原答案:

jupyter contrib nbextensions Python 包包含可在笔记本中启用的代码折叠扩展。按照链接 (Github) 获取文档。

使用命令行安装:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

为了更轻松地管理它们,我还推荐使用 jupyter nbextensions configurator 包。这会在您的笔记本界面中提供一个额外的选项卡,您可以在其中轻松(停用)所有已安装的扩展。

安装:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

【讨论】:

  • 很酷的东西,虽然我希望“代码折叠”nbextension 可以折叠整个单元格,而不仅仅是代码块。
  • 如果有人遇到 conda 安装问题,请尝试:pip install jupyter_contrib_nbextensions 然后jupyter contrib nbextensions install --sys-prefix --skip-running-check。我希望 jupyter 默认有这个包。
  • 最简单的安装路径是via conda itself:conda install -c conda-forge jupyter_contrib_nbextensions
  • 只是给使用较新 JupyterLab 的任何人的快速说明。根据提到的 GitHub 站点,这些扩展在 JupyterLab 中工作。我自己也想知道这一点,所以我想我会让其他人知道。引用 GitHub 存储库:Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab.
  • 如果您在单元格顶部放置#comment,您可以折叠整个单元格。然后 Jupyter 会提供一个下拉箭头来折叠整个单元格。
【解决方案2】:

JupyterLab 支持单元格折叠。单击左侧的蓝色单元格栏将折叠单元格。

【讨论】:

  • 虽然不坚持导出
  • 有没有好的解决方案?我非常想在导出时隐藏折叠的单元格。我想保留一些代码和一些输出,并隐藏一些其他代码和输出,所以我不能只隐藏 all 代码.....
  • 代码和输出可以按照此答案中的描述折叠。此外,信息是持久的。它写在单元格的元数据中。 source_hiddenoutputs_hidden 已设置。 nbformat.readthedocs.io/en/latest/…
  • 美丽 - 正是我想要的。希望用户界面能以某种方式让这个功能更加明显。
  • 这个扩展是否允许将多个单元格(和子组)分组到一个层次结构中,就像 Mathematica 的前端一样?
【解决方案3】:

您可以创建一个单元格并将以下代码放入其中:

%%html
<style>
div.input {
    display:none;
}
</style>

运行此单元格将隐藏所有输入单元格。要显示它们,您可以使用菜单清除所有输出。

否则,您可以尝试以下笔记本扩展:

https://github.com/ipython-contrib/IPython-notebook-extensions/wiki/Home_3x

【讨论】:

【解决方案4】:

我遇到了类似的问题,@Energya 指出的“nbextensions”运行良好且毫不费力。安装说明很简单(我在 Windows 上尝试使用 anaconda)for the notebook extensionsfor their configurator

也就是说,我想补充一点,应该对以下扩展感兴趣。

  • 隐藏输入 | 此扩展允许在笔记本中隐藏单个代码单元。这可以通过单击工具栏按钮来实现:

  • 可折叠标题 |允许笔记本有可折叠的部分,由标题分隔

  • 代码折叠 |这已被提及,但我添加它是为了完整性

【讨论】:

    【解决方案5】:

    在 ~/.jupyter/custom/ 中创建 custom.js 文件,内容如下:

    $("<style type='text/css'> .cell.code_cell.collapse { max-height:30px; overflow:hidden;} </style>").appendTo("head");
    $('.prompt.input_prompt').on('click', function(event) {
        console.log("CLICKED", arguments)   
        var c = $(event.target.closest('.cell.code_cell'))
        if(c.hasClass('collapse')) {
            c.removeClass('collapse');
        } else {
            c.addClass('collapse');
        }
    });
    

    保存后,重启服务器,刷新笔记本。您可以通过单击输入标签 (In[]) 折叠任何单元格。

    【讨论】:

    • 这对我不起作用,因为执行自定义 js 时未加载要更改的 div。但是,这可以通过将所有内容包装在 setTimeout(function() {...}, 3000); 中来解决
    • 在将第 4 行更改为:var c = $(event.target).closest('.cell.code_cell') 并按照 Steohan 的建议将所有内容包含在 setTimeout 中后,这对我有用。
    • 你可以简单地使用 c.toggleClass('collapse');而不是 if-else 语句。
    【解决方案6】:

    这个问题有很多答案,我觉得所有这些都不令人满意(有些比其他更多),在许多扩展中 - 代码折叠,按标题折叠等。没有一个以简单有效的方式做我想要的.我真的很惊讶没有实施解决方案(就像 Jupyter Lab 一样)。

    事实上,我非常不满意,我开发了一个非常简单的笔记本扩展程序,可以展开/折叠笔记本单元格中的代码,同时保持其可执行性。

    GitHub 存储库:https://github.com/BenedictWilkinsAI/cellfolding

    下面是扩展功能的一个小演示:

    只需双击代码单元格的左侧即可将其折叠成一行:

    再次双击将展开单元格。

    可以使用 pip 轻松安装扩展:

    pip install nbextension-cellfolding
    jupyter nbextension install --py cellfolding --user
    jupyter nbextension enable --py cellfolding --user 
    

    并且还与nbextension configurator 兼容。我希望人们会发现这很有用!

    【讨论】:

      【解决方案7】:

      hide_code 扩展允许您隐藏单个单元格和/或它们旁边的提示。安装为

      pip3 install hide_code
      

      访问 https://github.com/kirbs-/hide_code/ 了解有关此扩展程序的更多信息。

      【讨论】:

        【解决方案8】:

        首先,按照Energya的指示:

        pip install jupyter_contrib_nbextensions
        jupyter contrib nbextension install --user
        pip install jupyter_nbextensions_configurator
        jupyter nbextensions_configurator enable --user
        

        其次是关键: 打开 jupiter notebook 后,点击 Nbextension 标签。现在在Nbextension提供的搜索工具(不是浏览器)中搜索“colla”,然后你会找到一个叫做“Collapsible Headings”的东西

        这就是你想要的!

        【讨论】:

          【解决方案9】:

          还有一个改进版的潘延建议。它添加了显示代码单元格的按钮:

          %%html
          <style id=hide>div.input{display:none;}</style>
          <button type="button" 
          onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">
          Show inputs</button>
          

          或蟒蛇:

          # Run me to hide code cells
          
          from IPython.core.display import display, HTML
          display(HTML(r"""<style id=hide>div.input{display:none;}</style><button type="button"onclick="var myStyle = document.getElementById('hide').sheet;myStyle.insertRule('div.input{display:inherit !important;}', 0);">Show inputs</button>"""))
          

          【讨论】:

          • 代码隐藏所有输入单元格,而不是特定单元格。
          • 正是我想要的输出,但您可以通过在 Jupyter 菜单中切换来折叠/隐藏所有输出:单元格 > 所有输出 > 切换
          • 耻辱,这是我发现的唯一一个默认隐藏代码并且只在点击时显示的解决方案。不幸的是,这隐藏了所有单元格,而不仅仅是一个目标单元格。
          • @penelope 您可以检查不同的单元格是否具有不同的 html 元素 ID 或唯一类。如果是,那么您可以相应地修改我的答案。我的回答会影响所有细胞,因为它不会区分细胞。
          【解决方案10】:

          正如其他人所提到的,您可以通过 nbextensions 执行此操作。我想简要解释一下我所做的事情,这既快捷又简单:

          要启用可协作的标题: 在您的终端中,首先输入以下命令启用/安装 Jupyter Notebook Extensions:

          pip install jupyter_contrib_nbextensions
          

          然后,输入:

          jupyter contrib nbextension install
          

          重新打开 Jupyter Notebook。转到“编辑”选项卡,然后选择“nbextensions 配置”。 取消选中标题“Configurable nbextensions”下的复选框,然后选择“collapsible headings”。

          【讨论】:

          • 想知道为什么不能直接从主仪表板访问nbextensions config 而必须打开笔记本。或者,正如其他人所提到的,可以通过localhost:8888/nbextensions(或您配置中的任何端口)访问它
          • 谢谢!这很有帮助。我想知道如何继续进行 jupyterlab
          【解决方案11】:

          我用来获得预期结果的方法是:

          1. 将以下代码块保存在与笔记本相同的目录中名为 toggle_cell.py 的文件中
          from IPython.core.display import display, HTML
          toggle_code_str = '''
          <form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Show Sloution"></form>
          '''
          
          toggle_code_prepare_str = '''
              <script>
              function code_toggle() {
                  if ($('div.cell.code_cell.rendered.selected div.input').css('display')!='none'){
                      $('div.cell.code_cell.rendered.selected div.input').hide();
                  } else {
                      $('div.cell.code_cell.rendered.selected div.input').show();
                  }
              }
              </script>
          
          '''
          
          display(HTML(toggle_code_prepare_str + toggle_code_str))
          
          def hide_sloution():
              display(HTML(toggle_code_str))
          
          1. 在笔记本的第一个单元格中添加以下内容
          from toggle_cell import toggle_code as hide_sloution
          
          1. 您需要添加切换按钮的任何单元格都可以简单地调用hide_sloution()

          【讨论】:

            【解决方案12】:

            除了启用扩展之外,您不需要做太多事情:

            http://localhost:8888/nbextensions?nbextension=collapsible_headings
            http://localhost:8888/nbextensions?nbextension=codefolding/main
            

            您很可能会在这里找到所有扩展:

            http://localhost:8888/nbextensions
            

            【讨论】:

              【解决方案13】:

              我遇到了同样的问题,我发现这个扩展很有用

              pip install aquirdturtle_collapsible_headings
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-02-04
                • 2017-02-27
                • 2020-05-05
                • 2020-04-02
                • 1970-01-01
                • 2021-06-26
                • 1970-01-01
                • 2017-08-04
                相关资源
                最近更新 更多