รัน% matplotlib แบบอินไลน์โดยอัตโนมัติใน IPython Notebook


92

ทุกครั้งที่เปิด IPython Notebook คำสั่งแรกที่เรียกใช้คือ

%matplotlib inline

มีวิธีใดบ้างในการเปลี่ยนไฟล์กำหนดค่าของฉันเพื่อที่เมื่อฉันเปิดใช้งาน IPython ไฟล์นั้นจะอยู่ในโหมดนี้โดยอัตโนมัติหรือไม่


1
'ipython -pylab' ทำงานได้หรือไม่
Chris Arena

ถ้าเป็นเช่นนั้นคุณสามารถใช้นามแฝง ipython เพื่อทำสิ่งนั้นได้อย่างง่ายดาย
Chris Arena

5
ipython --matplotlibดีกว่า
tacaswell

โปรดละเว้นโปรดปราน คำตอบที่เลือกใช้ได้กับ 5.5.0 ฉันจะปิดเงินรางวัลหลังจากช่วงเวลา 24 ชั่วโมงที่บังคับ ขอโทษด้วยกับเรื่องนั้น!
Ricardo Cruz

ฉันพนันได้เลยว่าคุณใช้เวลามากขึ้นในการพิมพ์คำถามนี้และพยายามใช้วิธีแก้ปัญหามากกว่าการวางคำถามลงในสมุดบันทึกของคุณ: D
Intelligent-Infrastructure

คำตอบ:


83

วิธีการกำหนดค่า

IPython มีโปรไฟล์สำหรับการกำหนดค่าอยู่ที่~/.ipython/profile_*. profile_defaultโปรไฟล์เริ่มต้นที่เรียกว่า ภายในโฟลเดอร์นี้มีไฟล์คอนฟิกูเรชันหลักสองไฟล์:

  • ipython_config.py
  • ipython_kernel_config.py

เพิ่มตัวเลือกแบบอินไลน์สำหรับ matplotlib ไปที่ipython_kernel_config.py:

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

matplotlib กับ pylab

การใช้งานของ%pylabที่จะได้รับการวางแผนแบบอินไลน์เป็นกำลังใจ

มันแนะนำขยะทุกประเภทในเนมสเปซของคุณที่คุณไม่ต้องการ

%matplotlibในทางกลับกันเปิดใช้งานการพล็อตแบบอินไลน์โดยไม่ต้องฉีดเนมสเปซของคุณ คุณจะต้องทำการโทรอย่างชัดเจนเพื่อนำเข้า matplotlib และ numpy

import matplotlib.pyplot as plt
import numpy as np

ราคาเพียงเล็กน้อยในการพิมพ์การนำเข้าของคุณอย่างชัดเจนควรจะเอาชนะได้อย่างสมบูรณ์เพราะตอนนี้คุณมีรหัสที่สามารถทำซ้ำได้


2
ขอบคุณ. ฉันเคยเห็นตัวเลือกการกำหนดค่านี้ในเอกสาร matplotlib แต่ไม่แน่ใจว่าเพิ่งตั้งค่าแบ็กเอนด์ matplotlib ที่จะมีผลเมื่อคุณเรียกด้วยตนเอง%matplotlibหรือทั้งสองตั้งค่าแบ็กเอนด์เริ่มต้นและตั้งค่าโดยอัตโนมัติเพื่อใช้ในทันทีใน สภาพแวดล้อม iPython
8one6

3
หากต้องการเพิ่มการแก้ไขของ @Kyle Kelley ที่เกี่ยวกับmatplotlibvs pylabนั้น iPython ทำให้ง่ายมากในการเรียกใช้รหัสหลามโดยพลการโดยอัตโนมัติทุกครั้งที่คุณเปิดโดยใช้โปรไฟล์ ผมเชื่อว่ามันเป็นเรื่องธรรมดาที่จะมีรายละเอียดที่คุณทำโดยอัตโนมัติการนำเข้าที่เหมือนกันเช่นimport numpy as np; import pandas as pd; import matplotlib.pyplot as pltฯลฯ หมายเหตุ: pylabจะไม่ได้pyplotเป็นสิ่งเดียวกับ ฉันต้องใช้เวลาเป็นเดือนกว่าจะรู้ตัว
8one6

3
สิ่งนี้ (เช่นเดียวกับคำตอบของ SillyBear) หยุดทำงานกับ IPython 3. github.com/ipython/docker-notebook/pull/7#issuecomment-54729770แนะนำให้ใช้ "c.IPKernel.matplotlib" ... ซึ่งไม่ได้ผล .
Pietro Battiston

3
คำตอบนี้ใช้ได้ผลสำหรับฉัน ใน IPython 3 ดูเหมือนจะมีไฟล์การกำหนดค่าใหม่ipython_kernel_config.pyซึ่งมีตัวเลือกนี้ สร้างโปรไฟล์ใหม่ ( ipython profile create test) เพื่อรับค่าเริ่มต้น
DGrady

3
ดูเหมือนว่าตัวเลือกนี้จะเปลี่ยนชื่อเป็นc.InteractiveShellApp.matplotlib = "inline"
tiago

6

ฉันคิดว่าสิ่งที่คุณต้องการคือเรียกใช้สิ่งต่อไปนี้จากบรรทัดคำสั่ง:

ipython notebook --matplotlib=inline

หากคุณไม่ชอบพิมพ์ที่บรรทัด cmd ทุกครั้งคุณสามารถสร้างนามแฝงเพื่อทำแทนคุณได้


1
โปรดเปลี่ยนโพสต์ของคุณเป็น--matplotlib inlineและลบเนื้อหา --pylab ดูโพสต์นี้ของ ipython devel why: carreau.github.io/posts/10-No-PyLab-Thanks.ipynb.html
Jakob

1
หมายเหตุหนึ่งเกี่ยวกับmatplotlib=inline: มันจะทำให้เคอร์เนลทุกตัวที่คุณเปิดใช้งานช้าลงไม่ว่าคุณจะต้องการใช้ matplotlib หรือไม่ก็ตาม
Kyle Kelley

7
สิ่งนี้ใช้ไม่ได้อีกต่อไป (อย่างน้อยก็ใน IPython 4) ตัวเลือกบรรทัดคำสั่ง--matplotlibหรือ--pylabถูกละเว้น
tiago

1
ความช่วยเหลือสำหรับบรรทัดคำสั่ง Jupyter ช่วยบอกว่าตัวเลือกเหล่านี้ถูกปิดใช้งานและควรใช้%pylabหรือใช้%matplotlibแทน
Cas

4

การตั้งค่าถูกปิดใช้งานในJupyter 5.Xและสูงกว่าโดยการเพิ่มโค้ดด้านล่าง

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)

และในเวอร์ชันก่อนหน้านี้ส่วนใหญ่เป็นคำเตือน แต่นี่ไม่ใช่ปัญหาใหญ่เพราะ Jupyter ใช้แนวคิดของkernelsและคุณสามารถค้นหาเคอร์เนลสำหรับโครงการของคุณได้โดยเรียกใช้คำสั่งด้านล่าง

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

สิ่งนี้ทำให้ฉันมีเส้นทางไปยังโฟลเดอร์เคอร์เนล ตอนนี้ถ้าฉันเปิด/Users/tarunlalwani/Documents/Projects/SO/notebookinline/bin/../share/jupyter/kernels/python3/kernel.jsonไฟล์ฉันจะเห็นสิ่งที่ต้องการด้านล่าง

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

คุณจะเห็นคำสั่งที่เรียกใช้เพื่อเปิดเคอร์เนล ดังนั้นหากคุณเรียกใช้คำสั่งด้านล่าง

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

ตอนนี้ถ้าเราอัปเดตkernel.jsonไฟล์ของเราเป็น

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

และถ้าฉันเรียกใช้jupyter notebookกราฟจะเป็นไปโดยอัตโนมัติinline

อินไลน์อัตโนมัติ

โปรดทราบว่าแนวทางด้านล่างนี้ยังใช้งานได้โดยที่คุณสร้างไฟล์บนเส้นทางด้านล่าง

~ / .ipython / profile_default / ipython_kernel_config.py

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

แต่ข้อเสียของแนวทางนี้คือนี่คือผลกระทบทั่วโลกต่อทุกสภาพแวดล้อมโดยใช้ python คุณสามารถพิจารณาว่าเป็นข้อดีเช่นกันหากคุณต้องการมีพฤติกรรมร่วมกันในสภาพแวดล้อมที่มีการเปลี่ยนแปลงเพียงครั้งเดียว

ดังนั้นเลือกแนวทางที่คุณต้องการใช้ตามความต้องการของคุณ


3

ในipython_config.pyไฟล์ของคุณค้นหาบรรทัดต่อไปนี้

# c.InteractiveShellApp.matplotlib = None

และ

# c.InteractiveShellApp.pylab = None

และไม่แสดงความคิดเห็น จากนั้นเปลี่ยนNoneเป็นแบ็กเอนด์ที่คุณใช้ (ฉันใช้'qt4') และบันทึกไฟล์ รีสตาร์ท IPython และควรโหลด matplotlib และ pylab - คุณสามารถใช้dir()คำสั่งเพื่อตรวจสอบว่าโมดูลใดอยู่ในเนมสเปซส่วนกลาง


3

ใน (ปัจจุบัน) IPython 3.2.0 (Python 2 หรือ 3)

เปิดไฟล์คอนฟิกูเรชันภายในโฟลเดอร์. ipython ที่ซ่อนอยู่

~/.ipython/profile_default/ipython_kernel_config.py

เพิ่มบรรทัดต่อไปนี้

c.IPKernelApp.matplotlib = 'inline'

เพิ่มในภายหลัง

c = get_config()

2

นอกจาก @Kyle Kelley และ @DGrady นี่คือรายการที่สามารถพบได้ในไฟล์

$HOME/.ipython/profile_default/ipython_kernel_config.py (หรือโปรไฟล์ใดก็ตามที่คุณสร้างขึ้น)

เปลี่ยน

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

ถึง

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

จากนั้นจะใช้งานได้ทั้งในเซสชัน ipython qtconsole และโน้ตบุ๊ก


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.