javascript - sigma - man jupyter




nbviewerで視覚化されたipythonノートブックのセルからコードを隠す方法は? (10)

NBviewerを使用して視覚化するipython / jupyterノートブックがあります。

コードの出力(プロットやテーブルなど)とマークダウンセルのみが表示されるように、NBviewerによってレンダリングされたノートブックからすべてのコードを非表示にするにはどうすればよいですか?


ここには、HTMLにエクスポートされたノートブックに適した優れたソリューションがあります。 WebサイトはこのSO投稿にもリンクしていますが、クリスのソリューションはここには表示されません! (クリス、どこにいるの?)

これは基本的にharshilから受け入れられている回答と同じソリューションですが、エクスポートされたHTMLでトグルコード自体を隠すという利点があります。 また、このアプローチによりIPython HTML関数が不要になることも気に入っています。

このソリューションを実装するには、ノートブックの上部にある「Raw 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 例を提供し here

これがJupyter 5.0.0で機能することを確認できます

更新 div.prompt 要素とともに div.prompt 要素を表示/非表示することも便利です。 これにより、 In [##]: および Out: [##] テキストが削除され、左側の余白が小さくなります。


これにより、IPythonノートブック出力がレンダリングされます。 ただし、入力コードを表示できることに注意してください。 ノートブックをコピーし、必要に応じてこのコードを追加して、コードを表示する必要のない人と共有できます。

from IPython.display import HTML

HTML('''<script> $('div .input').hide()''')

これは、バージョン 5.2.1 からnbconvertから直接可能になりました。コンテンツは、組み込みの テンプレートエクスポーターのexcludeオプション を使用してフィルタリングでき ます 。 例えば:

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

「入力コード」セル、つまりコード自体を除外します。 プロンプト、マークダウンセル、出力、または入力と出力の両方を除外する 同様のオプション があります。

(これらのオプションは、出力形式に関係なく機能するはずです。)


これを実現するコードをいくつか作成し、コードの可視性を切り替えるボタンを追加しました。

以下は、ノートブックの上部にあるコードセルに入力します。

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)

こちらのNBviewerでこれがどのように見えるかの例を 見ることができ ます

更新: これはJupyterのMarkdownセルでおかしな動作をしますが、ノートブックのHTMLエクスポートバージョンでは正常に動作します。


印刷されたドキュメントまたはレポートでより適切に表示するには、ボタンも削除する必要があり、特定のコードブロックを表示または非表示にする機能も必要です。 私が使用するものは次のとおりです(これを最初のセルにコピーして貼り付けてください)。

# This is a cell to hide code snippets from displaying
# This must be at first cell!

from IPython.display import HTML

hide_me = ''
HTML('''<script>
code_show=true; 
function code_toggle() {
  if (code_show) {
    $('div.input').each(function(id) {
      el = $(this).find('.cm-variable:first');
      if (id == 0 || el.text() == 'hide_me') {
        $(this).hide();
      }
    });
    $('div.output_prompt').css('opacity', 0);
  } else {
    $('div.input').each(function(id) {
      $(this).show();
    });
    $('div.output_prompt').css('opacity', 1);
  }
  code_show = !code_show
} 
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input style="opacity:0" type="submit" value="Click here to toggle on/off the raw code."></form>''')

次に、次のセルで:

hide_me
print "this code will be hidden"

そして

print "this code will be shown"

受け入れられたソリューションは、次の変更を加えたjulia Jupyter / IJuliaでも機能します。

display("text/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>""")

特に注意してください:

  • display 機能を使用する
  • $ 記号をエスケープします(そうでない場合は変数として表示されます)

here 、プレゼンテーション用にJpuyter(新しいIPython)ノートブックを洗練する方法に関する素晴らしい記事(@Kenが投稿したもの)があります。 JavaScript、ノートブックのpythonカーネルと通信する機能など、JS、HTML、CSSを使用してJupyterを拡張する方法は無数にあります。 %%HTML%%javascript は魔法のデコレータがありますので、セルで次のようなことを行うことができます。

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

また、jupyter 4.XXでChrisのメソッドが機能することを保証することもできます。


p3trus 提案する別のソリューションを p3trus ます。

$([IPython.events]).on('notebook_loaded.Notebook', function(){
    IPython.toolbar.add_buttons_group([
        {
             'label'   : 'toggle input cells',
             'icon'    : 'icon-refresh', 
             'callback': function(){$('.input').slideToggle()}
        }
    ]);
});

p3trus 説明されているように、「[It]ボタンをipythonノートブックツールバーに追加して、入力コードセルを非表示/表示します。使用するには、custom.jsファイルを .ipython_<profile name>/static/custom/ に配置する必要があります .ipython_<profile name>/static/custom/ フォルダー、ここで 使用中のipythonプロファイルです。」

私自身のコメント:このソリューションを検証し、iPython 3.1.0で動作します。



(論文)HTMLとしての印刷または保存

紙に出力したい人には、上記の回答だけでは最終的な出力が得られないようです。 ただし、@ Max Masnickのコードを取得して次のコードを追加すると、完全なA4ページに印刷できます。

from IPython.display import display
from IPython.display import HTML
import IPython.core.display as di

di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)

CSS = """#notebook div.output_subarea {max-width:100%;}""" #changes output_subarea width to 100% (from 100% - 14ex)
HTML('<style>{}</style>'.format(CSS))

インデントの理由は、Max Masnickによって削除されたプロンプトセクションが、出力時にすべてが左にシフトすることを意味するためです。 ただし、これは、 max-width:100%-14ex; に制限された出力の最大幅に対しては何もしませんでした max-width:100%-14ex; 。 これにより、output_subareaの最大幅が max-width:100%;





ipython-notebook