Frage Wie versteckt man Code aus Zellen in ipython-Notebooks, die mit nbviewer visualisiert wurden?


Ich habe ein ipython / jupyter Notebook, das ich mit NBviewer visualisiere.

Wie kann ich den gesamten vom NBviewer gerenderten Code aus dem Notebook ausblenden, so dass nur die Ausgabe von Code (z. B. Plots und Tabellen) und die Markdown-Zellen angezeigt werden?


76
2018-01-14 02:25


Ursprung


Antworten:


from IPython.display import HTML

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>''')

134
2018-01-21 17:24



ich würde ... benutzen hide_input_all von nbextensions (https://github.com/ipython-contrib/IPython-notebook-extensions). Hier ist wie:

  1. Finden Sie heraus, wo sich Ihr IPython-Verzeichnis befindet:

    from IPython.utils.path import get_ipython_dir
    print get_ipython_dir()
    
  2. Herunterladen nbextensions und verschiebe es in das IPython-Verzeichnis.

  3. Bearbeiten Sie Ihre custom.js Datei irgendwo im IPython - Verzeichnis (meins war in profile_default / statisch / benutzerdefiniert) ähnlich zu sein custom.beispiel.js in dem nbextensions Verzeichnis.

  4. Fügen Sie diese Zeile hinzu custom.js:

    IPython.load_extensions('usability/hide_input_all')
    

IPython Notebook hat jetzt eine Schaltfläche zum Umschalten zwischen Codezellen, unabhängig von der Arbeitsmappe.


14
2017-07-16 18:11



Die neueste Version von IPython Notebook erlaubt kein Ausführen von JavaScript in Markdown - Zellen, daher wird das Hinzufügen einer neuen Markdown - Zelle mit dem folgenden JavaScript - Code nicht mehr funktionieren, um Ihre Code - Zellen zu verbergen (siehe dieser Link)

Ändern Sie ~ / .ipython / profile_default / static / custom / custom.js wie folgt:

code_show=true;
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
}

$([IPython.events]).on("app_initialized.NotebookApp", function () {
  $("#view_menu").append("<li id=\"toggle_toolbar\" title=\"Show/Hide code cells\"><a href=\"javascript:code_toggle()\">Toggle Code Cells</a></li>")
});

13
2018-04-20 03:04



Ich habe einen Code geschrieben, der dies ermöglicht, und fügt eine Schaltfläche hinzu, um die Sichtbarkeit des Codes zu ändern.

Das Folgende gehört in eine Codezelle am Anfang eines Notizbuchs:

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)

Du kannst sehen ein Beispiel, wie dies in NBviewer hier aussieht.

Aktualisieren: Dies wird einige lustige Verhalten mit Markdown-Zellen in Jupyter haben, aber es funktioniert gut in der HTML-Export-Version des Notebooks.


6
2017-07-15 15:40



Zur besseren Darstellung mit gedrucktem Dokument oder einem Bericht müssen wir auch die Schaltfläche entfernen und bestimmte Codeblöcke ein- oder ausblenden. Hier ist was ich benutze (kopiere es einfach in deine erste Zelle):

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

Dann in deinen nächsten Zellen:

hide_me
print "this code will be hidden"

und

print "this code will be shown"

4
2017-08-05 17:53



Es gibt eine nette Lösung zur Verfügung gestellt Hier das funktioniert gut für Notebooks, die nach HTML exportiert werden. Die Webseite verlinkt sogar hier zu diesem SO-Post, aber ich sehe Chris Lösung hier nicht! (Chris, wo bist du?)

Dies ist im Grunde die gleiche Lösung wie die angenommene Antwort von Harshil, aber es hat den Vorteil, den Toggle-Code selbst im exportierten HTML zu verstecken. Ich mag auch, dass dieser Ansatz die IPython-HTML-Funktion überflüssig macht.

Um diese Lösung zu implementieren, fügen Sie den folgenden Code zu einer Zelle "Raw NBConvert" am oberen Rand Ihres Notebooks hinzu:

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

Dann exportieren Sie das Notebook einfach nach HTML. Es wird eine Umschalttaste oben auf dem Notebook geben, um den Code ein- oder auszublenden.

Chris bietet auch ein Beispiel Hier.

Ich kann bestätigen, dass dies in Jupyter 5.0.0 funktioniert

Aktualisieren: Es ist auch praktisch, das zu zeigen / auszublenden div.prompt Elemente zusammen mit dem div.input Elemente. Dies entfernt die In [##]: und Out: [##] Text und reduziert die Ränder auf der linken Seite.


4
2017-10-30 14:29



Verwenden Sie die Runtools, die das grundlegende iPython-Notizbuch erweitern:

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


2
2018-01-14 16:39



Dadurch wird eine IPython-Notebookausgabe ausgegeben. Sie werden jedoch feststellen, dass der Eingabecode angezeigt werden kann. Sie können ein Notizbuch kopieren und diesen Code bei Bedarf hinzufügen, um ihn mit jemandem zu teilen, der den Code nicht sehen muss.

from IPython.display import HTML

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

2
2017-12-10 01:47