Jalankan% matplotlib inline secara otomatis di Notebook IPython

92

Setiap kali saya meluncurkan IPython Notebook, perintah pertama yang saya jalankan adalah

%matplotlib inline

Apakah ada cara untuk mengubah file konfigurasi saya sehingga ketika saya meluncurkan IPython, secara otomatis dalam mode ini?

8one6
sumber
1
Apakah 'ipython -pylab' berfungsi?
Chris Arena
Jika demikian, Anda dapat menggunakan alias ipython untuk melakukannya dengan cukup mudah.
Chris Arena
5
ipython --matplotliblebih baik
tacaswell
Harap abaikan hadiahnya . Jawaban yang dipilih berhasil untuk 5.5.0. Saya akan menutup bounty setelah periode 24 jam wajib. Maaf soal itu!
Ricardo Cruz
Saya yakin Anda menghabiskan lebih banyak waktu untuk mengetik pertanyaan ini dan mencoba menerapkan solusi daripada hanya menempelkannya ke awal notebook Anda: D
Intelligent-Infrastructure

Jawaban:

83

Cara konfigurasi

IPython memiliki profil untuk konfigurasi, terletak di ~/.ipython/profile_*. Profil default dipanggil profile_default. Di dalam folder ini ada dua file konfigurasi utama:

  • ipython_config.py
  • ipython_kernel_config.py

Tambahkan opsi sebaris untuk matplotlib ke ipython_kernel_config.py:

c = get_config()
# ... Any other configurables you want to set
c.InteractiveShellApp.matplotlib = "inline"

matplotlib vs. pylab

Penggunaan %pylabuntuk mendapatkan plotting sebaris tidak disarankan .

Ini memperkenalkan semua jenis kotoran ke dalam namespace Anda yang tidak Anda butuhkan.

%matplotlibdi sisi lain, memungkinkan plotting inline tanpa memasukkan namespace Anda. Anda harus melakukan panggilan eksplisit untuk mengimpor matplotlib dan numpy.

import matplotlib.pyplot as plt
import numpy as np

Harga kecil untuk mengetik impor Anda secara eksplisit harus sepenuhnya diatasi oleh fakta bahwa Anda sekarang memiliki kode yang dapat direproduksi.

Kyle Kelley
sumber
2
Terima kasih. Saya sebenarnya telah melihat opsi konfigurasi ini di dokumen matplotlib, tetapi tidak yakin apakah itu hanya mengatur backend matplotlib yang akan berlaku setelah Anda memanggil secara manual%matplotlib atau apakah keduanya mengatur backend default dan secara otomatis mengaturnya untuk digunakan segera di Lingkungan iPython.
8one6
3
Untuk menambah suntingan @Kyle Kel tentang matplotlibvs pylab, iPython membuatnya sangat mudah untuk secara otomatis mengeksekusi kode python sewenang-wenang setiap kali Anda meluncurkan menggunakan Profil. Saya percaya itu adalah sangat umum untuk memiliki profil di mana Anda secara otomatis melakukan impor umum seperti import numpy as np; import pandas as pd; import matplotlib.pyplot as plt, dll NB: pylabini bukan hal yang sama seperti pyplot. Pasti butuh waktu sebulan untuk menyadarinya.
8one6
3
Ini (serta jawaban SillyBear) berhenti bekerja dengan IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 menyarankan untuk menggunakan "c.IPKernel.matplotlib" ... yang juga tidak berfungsi .
Pietro Battiston
3
Jawaban ini berhasil untuk saya. Di IPython 3 tampaknya ada file konfigurasi baru ipython_kernel_config.py, yang berisi opsi ini. Buat profil baru ( ipython profile create test) untuk mendapatkan default.
DGrady
3
Opsi ini tampaknya telah diubah namanya menjadic.InteractiveShellApp.matplotlib = "inline"
tiago
6

Saya pikir apa yang Anda inginkan adalah menjalankan perintah berikut dari baris perintah:

ipython notebook --matplotlib=inline

Jika Anda tidak suka mengetik di baris cmd setiap saat, Anda dapat membuat alias untuk melakukannya untuk Anda.

SillyBear
sumber
1
Ubah postingan Anda menjadi --matplotlib inlinedan hapus item --pylab. Lihat posting ini tentang alasan ipython
Jakob
1
Satu catatan tentang matplotlib=inline: Ini akan memperlambat setiap kernel yang Anda luncurkan, terlepas dari apakah Anda ingin menggunakan matplotlib.
Kyle Kelley
7
Ini tidak lagi berfungsi (setidaknya pada IPython 4). Opsi baris perintah --matplotlibatau --pylabdiabaikan.
tiago
1
Bantuan untuk bantuan baris perintah Jupyter mengatakan opsi ini dinonaktifkan dan harus digunakan %pylabatau %matplotlibsebagai gantinya.
Cas
4

Pengaturan dinonaktifkan di Jupyter 5.Xdan lebih tinggi dengan menambahkan kode di bawah ini

pylab = Unicode('disabled', config=True,
    help=_("""
    DISABLED: use %pylab or %matplotlib in the notebook to enable matplotlib.
    """)
)

@observe('pylab')
def _update_pylab(self, change):
    """when --pylab is specified, display a warning and exit"""
    if change['new'] != 'warn':
        backend = ' %s' % change['new']
    else:
        backend = ''
    self.log.error(_("Support for specifying --pylab on the command line has been removed."))
    self.log.error(
        _("Please use `%pylab{0}` or `%matplotlib{0}` in the notebook itself.").format(backend)
    )
    self.exit(1)

Dan di versi sebelumnya, ini sebagian besar merupakan peringatan. Tapi ini bukan masalah besar karena Jupyter menggunakan konsep kernelsdan Anda dapat menemukan kernel untuk proyek Anda dengan menjalankan perintah di bawah ini

$ jupyter kernelspec list
Available kernels:
  python3    /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3

Ini memberi saya jalur ke folder kernel. Sekarang jika saya membuka /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonfile tersebut, saya melihat sesuatu seperti di bawah ini

{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}",
 ],
 "display_name": "Python 3",
 "language": "python"
}

Jadi Anda bisa melihat perintah apa yang dijalankan untuk meluncurkan kernel. Jadi jika Anda menjalankan perintah di bawah ini

$ python -m ipykernel_launcher --help
IPython: an enhanced interactive Python shell.

Subcommands
-----------

Subcommands are launched as `ipython-kernel cmd [args]`. For information on
using subcommand 'cmd', do: `ipython-kernel cmd -h`.

install
    Install the IPython kernel

Options
-------

Arguments that take values are actually convenience aliases to full
Configurables, whose aliases are listed on the help line. For more information
on full configurables, see '--help-all'.

....
--pylab=<CaselessStrEnum> (InteractiveShellApp.pylab)
    Default: None
    Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
    Pre-load matplotlib and numpy for interactive use, selecting a particular
    matplotlib backend and loop integration.
--matplotlib=<CaselessStrEnum> (InteractiveShellApp.matplotlib)
    Default: None
    Choices: ['auto', 'agg', 'gtk', 'gtk3', 'inline', 'ipympl', 'nbagg', 'notebook', 'osx', 'pdf', 'ps', 'qt', 'qt4', 'qt5', 'svg', 'tk', 'widget', 'wx']
    Configure matplotlib for interactive use with the default matplotlib
    backend.
...    
To see all available configurables, use `--help-all`

Jadi sekarang jika kita memperbarui kernel.jsonfile kita menjadi

{
 "argv": [
  "python",
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}",
  "--pylab",
  "inline"
 ],
 "display_name": "Python 3",
 "language": "python"
}

Dan jika saya menjalankan jupyter notebookgrafik secara otomatisinline

Inline Otomatis

Perhatikan bahwa pendekatan di bawah ini juga masih berfungsi, di mana Anda membuat file di jalur di bawah ini

~ / .ipython / profile_default / ipython_kernel_config.py

c = get_config()
c.IPKernelApp.matplotlib = 'inline'

Tetapi kelemahan dari pendekatan ini adalah bahwa ini berdampak global pada setiap lingkungan yang menggunakan python. Anda juga dapat menganggapnya sebagai keuntungan jika Anda ingin memiliki perilaku yang sama di seluruh lingkungan dengan satu perubahan.

Jadi pilihlah pendekatan yang ingin Anda gunakan berdasarkan kebutuhan Anda

Tarun Lalwani
sumber
3

Di ipython_config.pyfile Anda , cari baris berikut

# c.InteractiveShellApp.matplotlib = None

dan

# c.InteractiveShellApp.pylab = None

dan hapus komentar mereka. Kemudian, ubah Noneke backend yang Anda gunakan (saya gunakan'qt4' ) dan simpan file. Mulai ulang IPython, dan matplotlib serta pylab harus dimuat - Anda dapat menggunakan dir()perintah untuk memverifikasi modul mana yang ada di namespace global.

MattDMo
sumber
3

Di (saat ini) IPython 3.2.0 (Python 2 atau 3)

Buka file konfigurasi di dalam folder tersembunyi .ipython

~/.ipython/profile_default/ipython_kernel_config.py

tambahkan baris berikut

c.IPKernelApp.matplotlib = 'inline'

tambahkan langsung setelahnya

c = get_config()
memebrain
sumber
2

Selanjutnya ke @Kyle Kel dan @DGrady, berikut adalah entri yang dapat ditemukan di

$HOME/.ipython/profile_default/ipython_kernel_config.py (atau profil mana pun yang Anda buat)

Perubahan

# Configure matplotlib for interactive use with the default matplotlib backend.
# c.IPKernelApp.matplotlib = none

untuk

# Configure matplotlib for interactive use with the default matplotlib backend.
c.IPKernelApp.matplotlib = 'inline'

Ini kemudian akan bekerja di sesi ipython qtconsole dan notebook.

Chris Hanning
sumber
2

Buat .pyfile apa saja yang ~/.ipython/profile_default/startup/mengandung

get_ipython().magic('matplotlib inline')
flow2k
sumber