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