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