IPythonノートブックで特定の入力または出力セルを選択的に非表示にする方法はありますか?
すべての入力セルを表示/非表示にするためのコードは次のとおりです。
http://blog.nextgenetics.net/?e=102
しかし、ノートブックの最初の入力セルのみを非表示にしたい場合はどうすればよいですか?
これは、タグを使用してnbconvert( 5.3.0以降 )に組み込まれました。
次に、出力から特定のセルを削除する例を示します。 このノートブック を使用します。この例には、マークダウンセル、非表示になるコードセル、非表示にならないコードセルの3つのセルがあります。
remove_cell
タグを追加します(特定の名前「remove_cell」は関係ありません)Nbconvertで変換する
jupyter nbconvert nbconvert-example.ipynb --TagRemovePreprocessor.remove_cell_tags='{"remove_cell"}'
タグremove_cell
を持つセルは、出力から削除されます。
セル全体に加えて、入力のみまたは出力のみをフィルタリングできます。
TagRemovePreprocessor.remove_input_tags
TagRemovePreprocessor.remove_single_output_tags
TagRemovePreprocessor.remove_all_outputs_tags
これはMathmagicianの答えを拡張したもので、次のことができます。
必要なことは、最初に次のコードを実行して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)
セルメタデータのみを編集することで、HTML/PDF出力からセルを非表示にできるメソッドを次に示します。
私が使用しているバージョン:
_$ jupyter notebook --version
_
4.1.0
_$ jupyter nbconvert --version
_
4.2.0
jupyter notebook
_を実行しますlocalhost:8888/nbextensions
_(または開始したポート)に移動し、Printview
をアクティブにしますlocalhost:8888/tree
_に戻って、新しいノートブックを作成し、それに進みますprint("You can see me") #but not me
View
> _Cell Toolbar
_> _Edit Metadata
_に移動しますEdit Metadata
_ボタンをクリックします'hide_input':True
_をjsonに追加します。私の後には_{ "collapsed": false, "hide_input": true, "trusted": true }
_のように見えましたjupyter nbconvert --to pdf --template printviewlatex.tplx notebookname.ipynb
_を実行します(ノートブックが_notebookname.ipynb.ipynb
_と呼ばれる場合)これで、ディレクトリにnotebookname.pdfというドキュメントが作成されます。願わくば、テキスト_You can see me
_だけが含まれているはずです...
すべての入力セルを非表示にするためのソリューションを変更して、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 Cells(Ctrl+Return)オプション、notセルの実行および下の選択/挿入オプション。これらは、JavaScriptを実行する前に「選択された」ラベルの次のセルへの移動を促すため、「ここをクリックしていないセルを非表示にすることができます "出力のリンクを切り替えます。その場合、セルをinspectし、関連するタグをナビゲートし、display='none';
をdisplay='block';
に変更する必要があります。
これはセル内のコードの最後に配置する必要があり、このコードを実行する前にIPython.displayからHTMLをインポートする必要があることに注意してください。あなたは実行することでそうすることができます
from IPython.display import HTML
すべてのコードセルを除外すると便利な場合(ここでは説明していません)、このフラグを追加できますnbconvert --TemplateExporter.exclude_code_cell=True
OK、成功せずに試してみたところ、ここで答えが述べられました。 kirbsのこの拡張機能を見つけました。 Hide_code nbextension 正常に機能します。ただし、次のことをお勧めします。
まず、jupyter、nbconverter、nbconverter拡張機能、jupyter serverextensionを更新したことを確認してください。その場合、anacondaプロンプトで次の操作を実行できます(管理者権限で開きます)。
pip install hide_code
jupyter nbextension install --py hide_code
jupyter nbextension enable --py hide_code
jupyter serverextension enable --py hide_code
最後に、anacondaディストリビューションを使用してノートブックを開く場合は、次のコマンドも使用してください。
jupyter nbextension install --sys-prefix --py hide_code
jupyter nbextension enable --sys-prefix --py hide_code
jupyter serverextension enable --sys-prefix --py hide_code
これらのコマンドの実行にエラーがない場合は、ツールバーにあるコードの非表示オプションを表示して使用できます。
できた!エクスポートとボイラーにボタンを使用する場合!
がんばろう
@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