| | """Implementation of magic functions for matplotlib/pylab support. |
| | """ |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | from traitlets.config.application import Application |
| | from IPython.core import magic_arguments |
| | from IPython.core.magic import Magics, magics_class, line_magic |
| | from IPython.testing.skipdoctest import skip_doctest |
| | from warnings import warn |
| | from IPython.core.pylabtools import backends |
| |
|
| | |
| | |
| | |
| |
|
| | magic_gui_arg = magic_arguments.argument( |
| | 'gui', nargs='?', |
| | help="""Name of the matplotlib backend to use %s. |
| | If given, the corresponding matplotlib backend is used, |
| | otherwise it will be matplotlib's default |
| | (which you can set in your matplotlib config file). |
| | """ % str(tuple(sorted(backends.keys()))) |
| | ) |
| |
|
| |
|
| | @magics_class |
| | class PylabMagics(Magics): |
| | """Magics related to matplotlib's pylab support""" |
| |
|
| | @skip_doctest |
| | @line_magic |
| | @magic_arguments.magic_arguments() |
| | @magic_arguments.argument('-l', '--list', action='store_true', |
| | help='Show available matplotlib backends') |
| | @magic_gui_arg |
| | def matplotlib(self, line=''): |
| | """Set up matplotlib to work interactively. |
| | |
| | This function lets you activate matplotlib interactive support |
| | at any point during an IPython session. It does not import anything |
| | into the interactive namespace. |
| | |
| | If you are using the inline matplotlib backend in the IPython Notebook |
| | you can set which figure formats are enabled using the following:: |
| | |
| | In [1]: from matplotlib_inline.backend_inline import set_matplotlib_formats |
| | |
| | In [2]: set_matplotlib_formats('pdf', 'svg') |
| | |
| | The default for inline figures sets `bbox_inches` to 'tight'. This can |
| | cause discrepancies between the displayed image and the identical |
| | image created using `savefig`. This behavior can be disabled using the |
| | `%config` magic:: |
| | |
| | In [3]: %config InlineBackend.print_figure_kwargs = {'bbox_inches':None} |
| | |
| | In addition, see the docstrings of |
| | `matplotlib_inline.backend_inline.set_matplotlib_formats` and |
| | `matplotlib_inline.backend_inline.set_matplotlib_close` for more information on |
| | changing additional behaviors of the inline backend. |
| | |
| | Examples |
| | -------- |
| | To enable the inline backend for usage with the IPython Notebook:: |
| | |
| | In [1]: %matplotlib inline |
| | |
| | In this case, where the matplotlib default is TkAgg:: |
| | |
| | In [2]: %matplotlib |
| | Using matplotlib backend: TkAgg |
| | |
| | But you can explicitly request a different GUI backend:: |
| | |
| | In [3]: %matplotlib qt |
| | |
| | You can list the available backends using the -l/--list option:: |
| | |
| | In [4]: %matplotlib --list |
| | Available matplotlib backends: ['osx', 'qt4', 'qt5', 'gtk3', 'gtk4', 'notebook', 'wx', 'qt', 'nbagg', |
| | 'gtk', 'tk', 'inline'] |
| | """ |
| | args = magic_arguments.parse_argstring(self.matplotlib, line) |
| | if args.list: |
| | backends_list = list(backends.keys()) |
| | print("Available matplotlib backends: %s" % backends_list) |
| | else: |
| | gui, backend = self.shell.enable_matplotlib(args.gui.lower() if isinstance(args.gui, str) else args.gui) |
| | self._show_matplotlib_backend(args.gui, backend) |
| |
|
| | @skip_doctest |
| | @line_magic |
| | @magic_arguments.magic_arguments() |
| | @magic_arguments.argument( |
| | '--no-import-all', action='store_true', default=None, |
| | help="""Prevent IPython from performing ``import *`` into the interactive namespace. |
| | |
| | You can govern the default behavior of this flag with the |
| | InteractiveShellApp.pylab_import_all configurable. |
| | """ |
| | ) |
| | @magic_gui_arg |
| | def pylab(self, line=''): |
| | """Load numpy and matplotlib to work interactively. |
| | |
| | This function lets you activate pylab (matplotlib, numpy and |
| | interactive support) at any point during an IPython session. |
| | |
| | %pylab makes the following imports:: |
| | |
| | import numpy |
| | import matplotlib |
| | from matplotlib import pylab, mlab, pyplot |
| | np = numpy |
| | plt = pyplot |
| | |
| | from IPython.display import display |
| | from IPython.core.pylabtools import figsize, getfigs |
| | |
| | from pylab import * |
| | from numpy import * |
| | |
| | If you pass `--no-import-all`, the last two `*` imports will be excluded. |
| | |
| | See the %matplotlib magic for more details about activating matplotlib |
| | without affecting the interactive namespace. |
| | """ |
| | args = magic_arguments.parse_argstring(self.pylab, line) |
| | if args.no_import_all is None: |
| | |
| | if Application.initialized(): |
| | app = Application.instance() |
| | try: |
| | import_all = app.pylab_import_all |
| | except AttributeError: |
| | import_all = True |
| | else: |
| | |
| | import_all = True |
| | else: |
| | |
| | import_all = not args.no_import_all |
| |
|
| | gui, backend, clobbered = self.shell.enable_pylab(args.gui, import_all=import_all) |
| | self._show_matplotlib_backend(args.gui, backend) |
| | print( |
| | "%pylab is deprecated, use %matplotlib inline and import the required libraries." |
| | ) |
| | print("Populating the interactive namespace from numpy and matplotlib") |
| | if clobbered: |
| | warn("pylab import has clobbered these variables: %s" % clobbered + |
| | "\n`%matplotlib` prevents importing * from pylab and numpy" |
| | ) |
| |
|
| | def _show_matplotlib_backend(self, gui, backend): |
| | """show matplotlib message backend message""" |
| | if not gui or gui == 'auto': |
| | print("Using matplotlib backend: %s" % backend) |
| |
|