jupyterノートブックのセルを折りたたむ


143

ipython Jupyter Notebookを使用しています。画面上で多くのスペースを占める関数を定義したとしましょう。セルを折りたたむ方法はありますか?

関数を実行して呼び出し可能なままにしたいが、ノートブックをより見やすくするためにセルを非表示/折りたたみたい。これどうやってするの?


30
うわー、それはすでに2017年で、簡単な解決策はありません
user1700890

31
2019年と引き続きカウント
Hardian Lawi

22
2020 ...(first!)
itzy

5
ああ、私はリマインダーを置いて、2021年の最初になることができるようにします
初心者

6
JupyterLabには2019年からこれがあります。セルをハイライトし、その横の青いバーをクリックします。3つのドットで表示されます。保存して後で、または他の場所で再び開くときに、それが尊重されます。View> などのその他の機能とオプションがあります。ここリンクCollapse All Codeこちら参照してください
ウェイン

回答:


94

jupyter contrib nbextensionsPythonパッケージは、ノートブックの中に有効にすることができ、コードの折りたたみ拡張が含まれています。ドキュメントについては、リンク(Github)に従ってください。

コマンドラインを使用してインストールするには:

pip install jupyter_contrib_nbextensions
jupyter contrib nbextension install --user

それらを管理しやすくするために、jupyter nbextensions configuratorパッケージもお勧めします。これにより、ノートブックインターフェイスに追加のタブが提供され、そこから、インストールされているすべての拡張機能を簡単に(非)アクティブ化できます。

インストール:

pip install jupyter_nbextensions_configurator
jupyter nbextensions_configurator enable --user

11
"Codefolding" nbextensionがコードブロックだけでなく、セル全体をフォールドすることを望みますが、すばらしいものです。
bsmith89 2017

2
誰もがcondaトライしてインストールの問題に実行する場合は:pip install jupyter_contrib_nbextensionsそれからjupyter contrib nbextensions install --sys-prefix --skip-running-check。私はjupyterがデフォルトでこのパッケージを持っていることを望みます。
user1700890

7
最も単純なインストールパスはconda自体を経由するものですconda install -c conda-forge jupyter_contrib_nbextensions
Max Ghenis 2018年

3
新しいJupyterLabを使用している人のための簡単なメモです。前述のGitHubサイトによると、これらの拡張機能はJupyterLabで機能します。私はこれを自分で考えたので、他の人に知らせたいと思いました。GitHubリポジトリの引用:Due to major differences between the Jupyter Notebook and JupyterLab, the extensions in this repository will not work in JupyterLab
NYCeyes 2018年

2
#commentをセルの上部に配置すると、セル全体を折りたたむことができます。Jupyterは、セル全体を折りたたむドロップダウン矢印を提供します。
EatSleepCode

27

セルを作成し、次のコードをその中に配置できます。

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

このセルを実行すると、すべての入力セルが非表示になります。それらを表示するには、メニューを使用してすべての出力をクリアできます。

それ以外の場合は、以下のようなノートブック拡張機能を試すことができます。

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


ノートブック拡張機能は本当に良いです。他にもたくさんあります。github.com/ipython-contrib/jupyter_contrib_nbextensions
shahensha

27

JupyterLabはセルの折りたたみをサポートしています。左側の青いセルバーをクリックすると、セルが折りたたまれます。 ここに画像の説明を入力してください


6
ただし、エクスポートは持続しません
コスモサ

これに対する良い解決策はありますか?エクスポートするときに、折りたたまれたセルを非表示にしたいのですが。一部のコードと一部の出力を保持し、他の一部のコードと出力を非表示にしたいので、すべてのコードを非表示にすることはできません....
Russell Richie

2
この回答で説明されているように、コードと出力を折りたたむことができます。さらに、情報は保持されます。セルのメタデータに書き込まれます。source_hiddenoutputs_hidden設定されています。nbformat.readthedocs.io/en/latest/...
gillesB

16

私にも同様の問題があり、@ Energyaによって指摘された「nbextensions」は非常にうまく、簡単に機能しました。ノートブック拡張機能そのコンフィギュレーターのインストール手順は簡単です(Windowsでanacondaを試してみました)。

とはいえ、以下の拡張機能に関心があると付け加えておきます。

  • 入力を隠す| この拡張機能により、ノートブック内の個々のコードセルを非表示にすることができます。これは、ツールバーボタンをクリックすることで実現できます。 入力を非表示

  • 折りたたみ可能な見出し| ノートブックに見出しで区切られた折りたたみセクションを許可 折りたたみ可能な見出し

  • コードフォールディング| これは言及されていますが、完全を期すために追加しました コードフォールディング


9

〜/ .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 [])をクリックすると、任意のセルを折りたたむことができます。


3
カスタムjsが実行されるときに、変更されるdivがロードされないため、これは私にとっては機能しませんでした。ただし、これはsetTimeout(function(){...}、3000)ですべてをラップして修正できます。
Steohan

2
これは、4行目var c = $(event.target).closest('.cell.code_cell') を次のように変更し、 すべてをsetTimeoutでラップするというSteohanの提案に従って機能しました。
プロテオーム2017

単純にc.toggleClass( 'collapse');を使用できます。if-elseステートメントの代わりに。
gouravkr

9

hide_code拡張機能を使用すると、個々のセルやその隣のプロンプトを非表示にできます。としてインストール

pip3 install hide_code

訪問https://github.com/kirbs-/hide_code/をこの拡張機能についての詳細情報のために。


9

まず、Energyaの指示に従います。

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

2つ目はキーです。ジュピターノートブックを開いたら、[Nbextension]タブをクリックします。今Nbextension(ないWebブラウザによって)が提供する検索ツールから「コラ」を検索し、その後、あなたは「折りたたみ見出し」と呼ばれるものがあります

これはあなたが望むものです!


2

他の人が述べたように、nbextensionsを介してこれを行うことができます。私がやったことの簡単な説明をしたかったので、それは素早く簡単でした。

コラボレーション可能な見出しを有効にするには:端末で、次のように入力してJupyter Notebook Extensionsを有効化/インストールします。

pip install jupyter_contrib_nbextensions

次に、次のように入力します。

jupyter contrib nbextension install

Jupyter Notebookを再度開きます。「編集」タブに行き、「nbextensions config」を選択します。タイトル「Configurable nbextensions」のすぐ下にあるチェックボックスをオフにして、「折りたたみ可能な見出し」を選択します。


なぜnbextensions configメインダッシュボードから直接アクセスできず、代わりにノートブックを開かなければならないのか疑問に思います。または、他の人が述べたように、localhost:8888/nbextensions(または構成内のいずれかのポートを介して)アクセスできます
アントワーヌ

2

この質問に対する多くの答えがありますが、コード折りたたみ、見出しによる折りたたみなど、多くの拡張機能のうち、満足のいくものではない(他のものよりも多い)と思います。どれも、単純で効果的な方法では望みどおりに動作しません。(Jupyter Labのように)ソリューションが実装されていないことに文字通り驚いています。

実際、コードを展開/折りたたむことができる非常にシンプルなノートブック拡張機能を開発したので、私はとても不満でした、ノートブックセル内のを実行可能に維持しながら。

GitHubリポジトリ:https : //github.com/BenedictWilkinsAI/cellfolding

以下は、拡張機能の機能の小さなデモです。

コードセルの左をダブルクリックするだけで、1行に折りたたまれます。

もう一度ダブルクリックすると、セルが展開されます。

拡張機能は、pipを使用して簡単にインストールできます。

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

また、nbextension configuratorとも互換性があります。これが役に立つと思います!


2
魅力のように働いた。きちんとした
Ayan Mitra

1

Pan Yan提案の改良版もあります。コードセルを表示するボタンを追加します。

%%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>

またはpython:

# 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>"""))

2
コードは、特定のセルではなく、すべての入力セルを非表示にします。
Jack Fleeting

ただ、私は、出力のために望んでいたが、あなたは/崩壊Jupyterメニューでそれをトグルすることにより、すべての出力を非表示にすることができますどのような:>すべての出力>トグルセルを
markling

残念なことに、これは私が見つけた唯一の解決策であり、デフォルトでコードを非表示にし、クリック時にのみ表示します。残念ながら、これは1つのターゲットセルだけでなく、すべてのセルを非表示にします。
ペネロペ

@penelopeを使用すると、異なるセルに異なるHTML要素IDまたは一意のクラスがあるかどうかを確認できます。はいの場合は、それに応じて私の答えを変更できます。私の答えは細胞を区別しないため、すべての細胞に影響を与えます。
Peter Zagubisalo

1

拡張機能を有効にする以外は、何もする必要はありません。

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

ここに画像の説明を入力してください

ほとんどの場合、ここにすべての拡張機能が見つかります。

http://localhost:8888/nbextensions

ここに画像の説明を入力してください


1

私が望ましい結果を得るために使用するのは:

  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()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.