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