web-dev-qa-db-ja.com

IPython Notebookで特定のセル(入力または出力)を非表示にする方法は?

IPythonノートブックで特定の入力または出力セルを選択的に非表示にする方法はありますか?

すべての入力セルを表示/非表示にするためのコードは次のとおりです。

http://blog.nextgenetics.net/?e=102

しかし、ノートブックの最初の入力セルのみを非表示にしたい場合はどうすればよいですか?

31
Pan Yan

これは、タグを使用してnbconvert( 5.3.0以降 )に組み込まれました。

次に、出力から特定のセルを削除する例を示します。 このノートブック を使用します。この例には、マークダウンセル、非表示になるコードセル、非表示にならないコードセルの3つのセルがあります。

  1. ノートブックまたはJupyterLabに組み込まれているタグエディターを使用して、非表示にするセルにremove_cellタグを追加します(特定の名前「remove_cell」は関係ありません)
  2. Nbconvertで変換する

    jupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags='{"remove_cell"}'

タグremove_cellを持つセルは、出力から削除されます。

hidden

セル全体に加えて、入力のみまたは出力のみをフィルタリングできます。

  • TagRemovePreprocessor.remove_input_tags
  • TagRemovePreprocessor.remove_single_output_tags
  • TagRemovePreprocessor.remove_all_outputs_tags
33
TomAugspurger

これはMathmagicianの答えを拡張したもので、次のことができます。

  • 単一セルのみを切り替えます(JS関数名にはランダムなサフィックスが付いているため、複数回使用した場合、は競合しません他の用途で)
  • セルを切り替える現在のセルの下-これはRISEプレゼンテーションで非常に便利ですコードを表示したい場合がありますが、非表示にして出力を表示します

demo of the toggle

必要なことは、最初に次のコードを実行してhide_toggle関数を定義することです。

from IPython.display import HTML
import random

def hide_toggle(for_next=False):
    this_cell = """$('div.cell.code_cell.rendered.selected')"""
    next_cell = this_cell + '.next()'

    toggle_text = 'Toggle show/hide'  # text shown on toggle link
    target_cell = this_cell  # target cell to control with toggle
    js_hide_current = ''  # bit of JS to permanently hide code in current cell (only when toggling next cell)

    if for_next:
        target_cell = next_cell
        toggle_text += ' next cell'
        js_hide_current = this_cell + '.find("div.input").hide();'

    js_f_name = 'code_toggle_{}'.format(str(random.randint(1,2**64)))

    html = """
        <script>
            function {f_name}() {{
                {cell_selector}.find('div.input').toggle();
            }}

            {js_hide_current}
        </script>

        <a href="javascript:{f_name}()">{toggle_text}</a>
    """.format(
        f_name=js_f_name,
        cell_selector=target_cell,
        js_hide_current=js_hide_current, 
        toggle_text=toggle_text
    )

    return HTML(html)

そして、次のようなセルでそれを使用します:

x = 1
y = 2
print('Result is {} + {}'.format(x, y))

hide_toggle()

または、これ(次のセルを切り替える場合)

hide_toggle(for_next=True)
12
Ferrard

セルメタデータのみを編集することで、HTML/PDF出力からセルを非表示にできるメソッドを次に示します。

私が使用しているバージョン:

_$ jupyter notebook --version_

4.1.0

_$ jupyter nbconvert --version_

4.2.0

  1. Githubのインストール手順に従ってipythonノートブック拡張テンプレートをダウンロードします。pip install https://github.com/ipython-contrib/IPython-notebook-extensions/tarball/master
    • これにより、ローカルのjupyterデータディレクトリにファイルがインストールされます。 readmeの詳細
  2. _jupyter notebook_を実行します
  3. _localhost:8888/nbextensions_(または開始したポート)に移動し、Printviewをアクティブにします
  4. _localhost:8888/tree_に戻って、新しいノートブックを作成し、それに進みます
  5. 出力を生成するコードを含むコードセルを作成します。 print("You can see me") #but not me
  6. View> _Cell Toolbar_> _Edit Metadata_に移動します
  7. セルの右上に表示されている_Edit Metadata_ボタンをクリックします
  8. _'hide_input':True_をjsonに追加します。私の後には_{ "collapsed": false, "hide_input": true, "trusted": true }_のように見えました
  9. ノートを保存する
  10. ターミナルに戻って_jupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb_を実行します(ノートブックが_notebookname.ipynb.ipynb_と呼ばれる場合)

これで、ディレクトリにnotebookname.pdfというドキュメントが作成されます。願わくば、テキスト_You can see me_だけが含まれているはずです...

11
James Owers

すべての入力セルを非表示にするためのソリューションを変更して、1つのセルだけに影響を与えることができます。

'div.input''div.cell.code_cell.rendered.selected div.input'に変更します。

HTML('''<script>
code_show=true; 
function code_toggle() {
    if (code_show){
        $('div.cell.code_cell.rendered.selected div.input').hide();
    } else {
        $('div.cell.code_cell.rendered.selected div.input').show();
    }
    code_show = !code_show
} 

$( document ).ready(code_toggle);
</script>

To show/hide this cell's raw code input, click <a href="javascript:code_toggle()">here</a>.''')

これは、「click here」をクリックすると、セルの出力でプロンプトが表示され、そのセルが「選択された」セルになり、非表示になるためです。

JavaScriptコードが<script></script>タグ内でトグルを実行し、次のようなコード行がある場合

$( document ).ready(code_toggle);

入力セルが実行されると、ブロックは自動的に(デフォルトで)非表示になります。

デフォルトでセル入力を非表示にした場合、Run CellsCtrl+Return)オプション、notセルの実行および下の選択/挿入オプション。これらは、JavaScriptを実行する前に「選択された」ラベルの次のセルへの移動を促すため、「ここをクリックしていないセルを非表示にすることができます "出力のリンクを切り替えます。その場合、セルをinspectし、関連するタグをナビゲートし、display='none';display='block';に変更する必要があります。

これはセル内のコードの最後に配置する必要があり、このコードを実行する前にIPython.displayからHTMLをインポートする必要があることに注意してください。あなたは実行することでそうすることができます

from IPython.display import HTML
7
Mathmagician

すべてのコードセルを除外すると便利な場合(ここでは説明していません)、このフラグを追加できますnbconvert --TemplateExporter.exclude_code_cell=True

4
shouldsee

出力に関して、Jupiterノートブックでは、バーにオプションもあります: enter image description here 出力をClearするか、Toggleを使用して非表示にすることができます。どちらの場合も、セル内で計算された変数は削除されません。

4
G M

OK、成功せずに試してみたところ、ここで答えが述べられました。 kirbsのこの拡張機能を見つけました。 Hide_code nbextension 正常に機能します。ただし、次のことをお勧めします。

まず、jupyter、nbconverter、nbconverter拡張機能、jupyter serverextensionを更新したことを確認してください。その場合、anacondaプロンプトで次の操作を実行できます(管理者権限で開きます)。

  1. pip install hide_code
  2. jupyter nbextension install --py hide_code
  3. jupyter nbextension enable --py hide_code
  4. jupyter serverextension enable --py hide_code

最後に、anacondaディストリビューションを使用してノートブックを開く場合は、次のコマンドも使用してください。

  1. jupyter nbextension install --sys-prefix --py hide_code
  2. jupyter nbextension enable --sys-prefix --py hide_code
  3. jupyter serverextension enable --sys-prefix --py hide_code

これらのコマンドの実行にエラーがない場合は、ツールバーにあるコードの非表示オプションを表示して使用できます。

Hide_code toolbar

できた!エクスポートとボイラーにボタンを使用する場合!

エクスポートボタン

がんばろう

3
F4laF

@Mathmagicianソリューションはほぼ完璧ですが、多くの副作用があります。

より正しいのは次のようなものです:

from IPython.core.display import display, HTML
toggle_code_str = '''
<form action="javascript:code_toggle()"><input type="submit" id="toggleButton" value="Toggle Code"></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 toggle_code():
    display(HTML(toggle_code_str))

呼び出し toggle_code thanは、他のコードの前にあるコードセルに配置される可能性があるため、セル内のコードがゆっくり実行されても、副作用にはなりません。また、セルの実行と下の選択/挿入で問題を解決します

トグルボタンが追加されますが、初期状態は管理できません

最後に、この拡張機能を使用することが可能であることがわかりました。

https://github.com/ipython-contrib/IPython-notebook-extensions/blob/master/usability/hide_input.js

1
Pan Yan