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