##// END OF EJS Templates
added %matplotlib --list so backends are easily visible
Koen van Besien -
Show More
@@ -1,155 +1,163 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=None, action='store_true',
46 help='Show available matplotlib backends')
45 @magic_gui_arg
47 @magic_gui_arg
46 def matplotlib(self, line=''):
48 def matplotlib(self, line=''):
47 """Set up matplotlib to work interactively.
49 """Set up matplotlib to work interactively.
48
50
49 This function lets you activate matplotlib interactive support
51 This function lets you activate matplotlib interactive support
50 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
51 into the interactive namespace.
53 into the interactive namespace.
52
54
53 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
54 you can set which figure formats are enabled using the following::
56 you can set which figure formats are enabled using the following::
55
57
56 In [1]: from IPython.display import set_matplotlib_formats
58 In [1]: from IPython.display import set_matplotlib_formats
57
59
58 In [2]: set_matplotlib_formats('pdf', 'svg')
60 In [2]: set_matplotlib_formats('pdf', 'svg')
59
61
60 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
61 cause discrepancies between the displayed image and the identical
63 cause discrepancies between the displayed image and the identical
62 image created using `savefig`. This behavior can be disabled using the
64 image created using `savefig`. This behavior can be disabled using the
63 `%config` magic::
65 `%config` magic::
64
66
65 In [3]: %config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
67 In [3]: %config InlineBackend.print_figure_kwargs = {'bbox_inches':None}
66
68
67 In addition, see the docstring of
69 In addition, see the docstring of
68 `IPython.display.set_matplotlib_formats` and
70 `IPython.display.set_matplotlib_formats` and
69 `IPython.display.set_matplotlib_close` for more information on
71 `IPython.display.set_matplotlib_close` for more information on
70 changing additional behaviors of the inline backend.
72 changing additional behaviors of the inline backend.
71
73
72 Examples
74 Examples
73 --------
75 --------
74 To enable the inline backend for usage with the IPython Notebook::
76 To enable the inline backend for usage with the IPython Notebook::
75
77
76 In [1]: %matplotlib inline
78 In [1]: %matplotlib inline
77
79
78 In this case, where the matplotlib default is TkAgg::
80 In this case, where the matplotlib default is TkAgg::
79
81
80 In [2]: %matplotlib
82 In [2]: %matplotlib
81 Using matplotlib backend: TkAgg
83 Using matplotlib backend: TkAgg
82
84
83 But you can explicitly request a different GUI backend::
85 But you can explicitly request a different GUI backend::
84
86
85 In [3]: %matplotlib qt
87 In [3]: %matplotlib qt
86 """
88 """
89
87 args = magic_arguments.parse_argstring(self.matplotlib, line)
90 args = magic_arguments.parse_argstring(self.matplotlib, line)
91
92 if args.list is not None:
93 backends_list = list(backends.keys())
94 print("Available matplotlib backends: %s" % backends_list)
95 else:
88 gui, backend = self.shell.enable_matplotlib(args.gui)
96 gui, backend = self.shell.enable_matplotlib(args.gui)
89 self._show_matplotlib_backend(args.gui, backend)
97 self._show_matplotlib_backend(args.gui, backend)
90
98
91 @skip_doctest
99 @skip_doctest
92 @line_magic
100 @line_magic
93 @magic_arguments.magic_arguments()
101 @magic_arguments.magic_arguments()
94 @magic_arguments.argument(
102 @magic_arguments.argument(
95 '--no-import-all', action='store_true', default=None,
103 '--no-import-all', action='store_true', default=None,
96 help="""Prevent IPython from performing ``import *`` into the interactive namespace.
104 help="""Prevent IPython from performing ``import *`` into the interactive namespace.
97
105
98 You can govern the default behavior of this flag with the
106 You can govern the default behavior of this flag with the
99 InteractiveShellApp.pylab_import_all configurable.
107 InteractiveShellApp.pylab_import_all configurable.
100 """
108 """
101 )
109 )
102 @magic_gui_arg
110 @magic_gui_arg
103 def pylab(self, line=''):
111 def pylab(self, line=''):
104 """Load numpy and matplotlib to work interactively.
112 """Load numpy and matplotlib to work interactively.
105
113
106 This function lets you activate pylab (matplotlib, numpy and
114 This function lets you activate pylab (matplotlib, numpy and
107 interactive support) at any point during an IPython session.
115 interactive support) at any point during an IPython session.
108
116
109 %pylab makes the following imports::
117 %pylab makes the following imports::
110
118
111 import numpy
119 import numpy
112 import matplotlib
120 import matplotlib
113 from matplotlib import pylab, mlab, pyplot
121 from matplotlib import pylab, mlab, pyplot
114 np = numpy
122 np = numpy
115 plt = pyplot
123 plt = pyplot
116
124
117 from IPython.display import display
125 from IPython.display import display
118 from IPython.core.pylabtools import figsize, getfigs
126 from IPython.core.pylabtools import figsize, getfigs
119
127
120 from pylab import *
128 from pylab import *
121 from numpy import *
129 from numpy import *
122
130
123 If you pass `--no-import-all`, the last two `*` imports will be excluded.
131 If you pass `--no-import-all`, the last two `*` imports will be excluded.
124
132
125 See the %matplotlib magic for more details about activating matplotlib
133 See the %matplotlib magic for more details about activating matplotlib
126 without affecting the interactive namespace.
134 without affecting the interactive namespace.
127 """
135 """
128 args = magic_arguments.parse_argstring(self.pylab, line)
136 args = magic_arguments.parse_argstring(self.pylab, line)
129 if args.no_import_all is None:
137 if args.no_import_all is None:
130 # get default from Application
138 # get default from Application
131 if Application.initialized():
139 if Application.initialized():
132 app = Application.instance()
140 app = Application.instance()
133 try:
141 try:
134 import_all = app.pylab_import_all
142 import_all = app.pylab_import_all
135 except AttributeError:
143 except AttributeError:
136 import_all = True
144 import_all = True
137 else:
145 else:
138 # nothing specified, no app - default True
146 # nothing specified, no app - default True
139 import_all = True
147 import_all = True
140 else:
148 else:
141 # invert no-import flag
149 # invert no-import flag
142 import_all = not args.no_import_all
150 import_all = not args.no_import_all
143
151
144 gui, backend, clobbered = self.shell.enable_pylab(args.gui, import_all=import_all)
152 gui, backend, clobbered = self.shell.enable_pylab(args.gui, import_all=import_all)
145 self._show_matplotlib_backend(args.gui, backend)
153 self._show_matplotlib_backend(args.gui, backend)
146 print ("Populating the interactive namespace from numpy and matplotlib")
154 print ("Populating the interactive namespace from numpy and matplotlib")
147 if clobbered:
155 if clobbered:
148 warn("pylab import has clobbered these variables: %s" % clobbered +
156 warn("pylab import has clobbered these variables: %s" % clobbered +
149 "\n`%matplotlib` prevents importing * from pylab and numpy"
157 "\n`%matplotlib` prevents importing * from pylab and numpy"
150 )
158 )
151
159
152 def _show_matplotlib_backend(self, gui, backend):
160 def _show_matplotlib_backend(self, gui, backend):
153 """show matplotlib message backend message"""
161 """show matplotlib message backend message"""
154 if not gui or gui == 'auto':
162 if not gui or gui == 'auto':
155 print("Using matplotlib backend: %s" % backend)
163 print("Using matplotlib backend: %s" % backend)
General Comments 0
You need to be logged in to leave comments. Login now