Tự động chạy% matplotlib nội tuyến trong IPython Notebook


91

Mỗi khi tôi khởi chạy IPython Notebook, lệnh đầu tiên tôi chạy là

%matplotlib inline

Có cách nào để thay đổi tệp cấu hình của tôi để khi tôi khởi chạy IPython, nó sẽ tự động ở chế độ này không?


1
'Ipython -pylab' có hoạt động không?
Chris Arena

Nếu vậy, bạn có thể đặt bí danh ipython để làm điều đó khá dễ dàng.
Chris Arena,

5
ipython --matplotlibđược tốt hơn
tacaswell

Vui lòng bỏ qua tiền thưởng . Câu trả lời đã chọn hoạt động cho 5.5.0. Tôi sẽ đóng tiền thưởng sau khoảng thời gian 24 giờ bắt buộc. Xin lỗi vì điều đó!
Ricardo Cruz

Tôi đặt cược bạn dành nhiều thời gian gõ câu hỏi này và cố gắng để thực hiện giải pháp đơn giản hơn so với dán nó vào khởi điểm của máy tính xách tay của bạn: D
Intelligent-Cơ sở hạ tầng

Câu trả lời:


82

Cách cấu hình

IPython có hồ sơ để cấu hình, đặt tại ~/.ipython/profile_*. Cấu hình mặc định được gọi profile_default. Trong thư mục này có hai tệp cấu hình chính:

  • ipython_config.py
  • ipython_kernel_config.py

Thêm tùy chọn nội tuyến cho matplotlib vào ipython_kernel_config.py:

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

matplotlib so với pylab

Không khuyến khích sử dụng %pylabđể có được âm mưu nội tuyến .

Nó giới thiệu tất cả các loại rác vào không gian tên của bạn mà bạn chỉ không cần.

%matplotlibmặt khác cho phép vẽ nội tuyến mà không cần chèn không gian tên của bạn. Bạn sẽ cần thực hiện các lệnh gọi rõ ràng để nhập matplotlib và numpy.

import matplotlib.pyplot as plt
import numpy as np

Giá nhỏ của việc gõ ra các nhập khẩu của bạn một cách rõ ràng sẽ được khắc phục hoàn toàn bởi thực tế là bạn đã có mã có thể tái tạo.


2
Cảm ơn. Tôi đã thực sự thấy tùy chọn cấu hình này trong tài liệu matplotlib, nhưng không chắc liệu nó chỉ đặt phần phụ trợ matplotlib sẽ có hiệu lực khi bạn gọi theo cách thủ công%matplotlib hay liệu nó có đặt cả phần phụ trợ mặc định và tự động thiết lập để sử dụng ngay lập tức trong Môi trường iPython.
8one 6

3
Để thêm vào chỉnh sửa của @Kyle Kelley liên quan đến matplotlibvs pylab, iPython giúp bạn rất dễ dàng tự động thực thi mã python tùy ý mỗi khi bạn khởi chạy bằng Hồ sơ. Tôi tin rằng nó là khá phổ biến để có một cấu hình mà bạn tự động làm hàng nhập khẩu thông thường thích import numpy as np; import pandas as pd; import matplotlib.pyplot as pltvv NB: pylabkhông được điều tương tự như pyplot. Tôi phải mất một tháng để nhận ra điều đó.
8one 6

3
Điều này (cũng như câu trả lời của SillyBear) đã ngừng hoạt động với IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770 đề xuất sử dụng "c.IPKernel.matplotlib" ... mà cũng không hoạt động .
Pietro Battiston

3
Câu trả lời này đã làm việc cho tôi. Trong IPython 3 rõ ràng có một tệp cấu hình mới ipython_kernel_config.py, chứa tùy chọn này. Tạo một hồ sơ mới ( ipython profile create test) để có một hồ sơ mặc định.
DGrady

3
Tùy chọn này dường như đã được đổi tên thànhc.InteractiveShellApp.matplotlib = "inline"
tiago

6

Tôi nghĩ những gì bạn muốn có thể là chạy phần sau từ dòng lệnh:

ipython notebook --matplotlib=inline

Nếu bạn không thích gõ nó ở dòng cmd mọi lúc thì bạn có thể tạo một bí danh để làm điều đó cho bạn.


1
Vui lòng thay đổi bài đăng của bạn thành --matplotlib inlinevà xóa nội dung --pylab. Xem bài đăng này của một devel ipython lý do tại sao: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob

1
Một lưu ý về matplotlib=inline: Nó sẽ làm chậm mọi hạt nhân bạn khởi chạy, bất kể bạn có muốn sử dụng matplotlib hay không.
Kyle Kelley

7
Điều này không còn hoạt động (ít nhất là kể từ IPython 4). Các tùy chọn dòng lệnh --matplotlibhoặc --pylabbị bỏ qua.
tiago

1
Trợ giúp về trợ giúp dòng lệnh Jupyter cho biết các tùy chọn này đã bị tắt và nên sử dụng %pylabhoặc %matplotlibthay thế.
Cas

4

Cài đặt đã bị vô hiệu hóa trong Jupyter 5.Xvà cao hơn bằng cách thêm mã bên dưới

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)

Và trong các phiên bản trước, nó chủ yếu là một cảnh báo. Nhưng đây không phải là vấn đề lớn vì Jupyter sử dụng các khái niệm về kernelsvà bạn có thể tìm hạt nhân cho dự án của mình bằng cách chạy lệnh dưới đây

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

Điều này cho tôi đường dẫn đến thư mục hạt nhân. Bây giờ nếu tôi mở /Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsontệp, tôi thấy một cái gì đó như bên dưới

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

Vì vậy, bạn có thể xem lệnh nào được thực thi để khởi chạy hạt nhân. Vì vậy, nếu bạn chạy lệnh dưới đây

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

Vì vậy, bây giờ nếu chúng tôi cập nhật kernel.jsontệp của mình lên

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

Và nếu tôi chạy jupyter notebook, đồ thị sẽ tự độnginline

Nội tuyến tự động

Lưu ý rằng cách tiếp cận bên dưới cũng vẫn hoạt động, nơi bạn tạo tệp trên đường dẫn bên dưới

~ / .ipython / profile_default / ipython_kernel_config.py

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

Nhưng nhược điểm của cách làm này là tác động toàn cầu đến mọi môi trường sử dụng python. Bạn cũng có thể coi đó là một lợi thế nếu bạn muốn có một hành vi chung giữa các môi trường với một thay đổi duy nhất.

Vì vậy, hãy chọn cách tiếp cận mà bạn muốn sử dụng dựa trên yêu cầu của bạn


3

Trong ipython_config.pytệp của bạn , hãy tìm kiếm các dòng sau

# c.InteractiveShellApp.matplotlib = None

# c.InteractiveShellApp.pylab = None

và bỏ ghi chú chúng. Sau đó, thay đổi Nonethành phần phụ trợ mà bạn đang sử dụng (tôi sử dụng 'qt4') và lưu tệp. Khởi động lại IPython và matplotlib và pylab sẽ được tải - bạn có thể sử dụng dir()lệnh để xác minh mô-đun nào trong không gian tên chung.


3

Trong (hiện tại) IPython 3.2.0 (Python 2 hoặc 3)

Mở tệp cấu hình trong thư mục ẩn .ipython

~/.ipython/profile_default/ipython_kernel_config.py

thêm dòng sau

c.IPKernelApp.matplotlib = 'inline'

thêm nó ngay sau

c = get_config()

2

Ngoài @Kyle Kelley và @DGrady, đây là mục nhập có thể được tìm thấy trong

$HOME/.ipython/profile_default/ipython_kernel_config.py (hoặc bất kỳ hồ sơ nào bạn đã tạo)

Thay đổi

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

đến

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

Điều này sau đó sẽ hoạt động trong cả phiên ipython qtconsole và notebook.


2

Tạo bất kỳ .pytệp nào trong ~/.ipython/profile_default/startup/chứa

get_ipython().magic('matplotlib inline')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.