Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/IPython/core/magics/pylab.py: 48%
46 statements
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
« prev ^ index » next coverage.py v7.4.4, created at 2024-04-20 06:09 +0000
1"""Implementation of magic functions for matplotlib/pylab support.
2"""
3#-----------------------------------------------------------------------------
4# Copyright (c) 2012 The IPython Development Team.
5#
6# Distributed under the terms of the Modified BSD License.
7#
8# The full license is in the file COPYING.txt, distributed with this software.
9#-----------------------------------------------------------------------------
11#-----------------------------------------------------------------------------
12# Imports
13#-----------------------------------------------------------------------------
15# Our own packages
16from traitlets.config.application import Application
17from IPython.core import magic_arguments
18from IPython.core.magic import Magics, magics_class, line_magic
19from IPython.testing.skipdoctest import skip_doctest
20from warnings import warn
21from IPython.core.pylabtools import backends
23#-----------------------------------------------------------------------------
24# Magic implementation classes
25#-----------------------------------------------------------------------------
27magic_gui_arg = magic_arguments.argument(
28 'gui', nargs='?',
29 help="""Name of the matplotlib backend to use %s.
30 If given, the corresponding matplotlib backend is used,
31 otherwise it will be matplotlib's default
32 (which you can set in your matplotlib config file).
33 """ % str(tuple(sorted(backends.keys())))
34)
37@magics_class
38class PylabMagics(Magics):
39 """Magics related to matplotlib's pylab support"""
41 @skip_doctest
42 @line_magic
43 @magic_arguments.magic_arguments()
44 @magic_arguments.argument('-l', '--list', action='store_true',
45 help='Show available matplotlib backends')
46 @magic_gui_arg
47 def matplotlib(self, line=''):
48 """Set up matplotlib to work interactively.
50 This function lets you activate matplotlib interactive support
51 at any point during an IPython session. It does not import anything
52 into the interactive namespace.
54 If you are using the inline matplotlib backend in the IPython Notebook
55 you can set which figure formats are enabled using the following::
57 In [1]: from matplotlib_inline.backend_inline import set_matplotlib_formats
59 In [2]: set_matplotlib_formats('pdf', 'svg')
61 The default for inline figures sets `bbox_inches` to 'tight'. This can
62 cause discrepancies between the displayed image and the identical
63 image created using `savefig`. This behavior can be disabled using the
64 `%config` magic::
66 In [3]: %config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
68 In addition, see the docstrings of
69 `matplotlib_inline.backend_inline.set_matplotlib_formats` and
70 `matplotlib_inline.backend_inline.set_matplotlib_close` for more information on
71 changing additional behaviors of the inline backend.
73 Examples
74 --------
75 To enable the inline backend for usage with the IPython Notebook::
77 In [1]: %matplotlib inline
79 In this case, where the matplotlib default is TkAgg::
81 In [2]: %matplotlib
82 Using matplotlib backend: TkAgg
84 But you can explicitly request a different GUI backend::
86 In [3]: %matplotlib qt
88 You can list the available backends using the -l/--list option::
90 In [4]: %matplotlib --list
91 Available matplotlib backends: ['osx', 'qt4', 'qt5', 'gtk3', 'gtk4', 'notebook', 'wx', 'qt', 'nbagg',
92 'gtk', 'tk', 'inline']
93 """
94 args = magic_arguments.parse_argstring(self.matplotlib, line)
95 if args.list:
96 backends_list = list(backends.keys())
97 print("Available matplotlib backends: %s" % backends_list)
98 else:
99 gui, backend = self.shell.enable_matplotlib(args.gui.lower() if isinstance(args.gui, str) else args.gui)
100 self._show_matplotlib_backend(args.gui, backend)
102 @skip_doctest
103 @line_magic
104 @magic_arguments.magic_arguments()
105 @magic_arguments.argument(
106 '--no-import-all', action='store_true', default=None,
107 help="""Prevent IPython from performing ``import *`` into the interactive namespace.
109 You can govern the default behavior of this flag with the
110 InteractiveShellApp.pylab_import_all configurable.
111 """
112 )
113 @magic_gui_arg
114 def pylab(self, line=''):
115 """Load numpy and matplotlib to work interactively.
117 This function lets you activate pylab (matplotlib, numpy and
118 interactive support) at any point during an IPython session.
120 %pylab makes the following imports::
122 import numpy
123 import matplotlib
124 from matplotlib import pylab, mlab, pyplot
125 np = numpy
126 plt = pyplot
128 from IPython.display import display
129 from IPython.core.pylabtools import figsize, getfigs
131 from pylab import *
132 from numpy import *
134 If you pass `--no-import-all`, the last two `*` imports will be excluded.
136 See the %matplotlib magic for more details about activating matplotlib
137 without affecting the interactive namespace.
138 """
139 args = magic_arguments.parse_argstring(self.pylab, line)
140 if args.no_import_all is None:
141 # get default from Application
142 if Application.initialized():
143 app = Application.instance()
144 try:
145 import_all = app.pylab_import_all
146 except AttributeError:
147 import_all = True
148 else:
149 # nothing specified, no app - default True
150 import_all = True
151 else:
152 # invert no-import flag
153 import_all = not args.no_import_all
155 gui, backend, clobbered = self.shell.enable_pylab(args.gui, import_all=import_all)
156 self._show_matplotlib_backend(args.gui, backend)
157 print(
158 "%pylab is deprecated, use %matplotlib inline and import the required libraries."
159 )
160 print("Populating the interactive namespace from numpy and matplotlib")
161 if clobbered:
162 warn("pylab import has clobbered these variables: %s" % clobbered +
163 "\n`%matplotlib` prevents importing * from pylab and numpy"
164 )
166 def _show_matplotlib_backend(self, gui, backend):
167 """show matplotlib message backend message"""
168 if not gui or gui == 'auto':
169 print("Using matplotlib backend: %s" % backend)