Show More
@@ -83,7 +83,26 def compress_dhist(dh): | |||||
83 |
|
83 | |||
84 |
|
84 | |||
85 | def pylab_activate(user_ns, gui=None, import_all=True): |
|
85 | def pylab_activate(user_ns, gui=None, import_all=True): | |
86 | """....""" |
|
86 | """Activate pylab mode in the user's namespace. | |
|
87 | ||||
|
88 | Loads and initializes numpy, matplotlib and friends for interactive use. | |||
|
89 | ||||
|
90 | Parameters | |||
|
91 | ---------- | |||
|
92 | user_ns : dict | |||
|
93 | Namespace where the imports will occur. | |||
|
94 | ||||
|
95 | gui : optional, string | |||
|
96 | A valid gui name following the conventions of the %gui magic. | |||
|
97 | ||||
|
98 | import_all : optional, boolean | |||
|
99 | If true, an 'import *' is done from numpy and pylab. | |||
|
100 | ||||
|
101 | Returns | |||
|
102 | ------- | |||
|
103 | The actual gui used (if not given as input, it was obtained from matplotlib | |||
|
104 | itself, and will be needed next to configure IPython's gui integration. | |||
|
105 | """ | |||
87 |
|
106 | |||
88 | # Initialize matplotlib to interactive mode always |
|
107 | # Initialize matplotlib to interactive mode always | |
89 | import matplotlib |
|
108 | import matplotlib | |
@@ -106,12 +125,18 def pylab_activate(user_ns, gui=None, import_all=True): | |||||
106 | b2g = dict(zip(g2b.values(),g2b.keys())) |
|
125 | b2g = dict(zip(g2b.values(),g2b.keys())) | |
107 | gui = b2g[backend] |
|
126 | gui = b2g[backend] | |
108 |
|
127 | |||
|
128 | # We must set the desired backend before importing pylab | |||
109 | matplotlib.use(backend) |
|
129 | matplotlib.use(backend) | |
110 |
|
130 | |||
111 | # This must be imported last in the matplotlib series, after |
|
131 | # This must be imported last in the matplotlib series, after | |
112 | # backend/interactivity choices have been made |
|
132 | # backend/interactivity choices have been made | |
113 | import matplotlib.pylab as pylab |
|
133 | import matplotlib.pylab as pylab | |
114 |
|
134 | |||
|
135 | # XXX For now leave this commented out, but depending on discussions with | |||
|
136 | # mpl-dev, we may be able to allow interactive switching... | |||
|
137 | #import matplotlib.pyplot | |||
|
138 | #matplotlib.pyplot.switch_backend(backend) | |||
|
139 | ||||
115 | pylab.show._needmain = False |
|
140 | pylab.show._needmain = False | |
116 | # We need to detect at runtime whether show() is called by the user. |
|
141 | # We need to detect at runtime whether show() is called by the user. | |
117 | # For this, we wrap it into a decorator which adds a 'called' flag. |
|
142 | # For this, we wrap it into a decorator which adds a 'called' flag. | |
@@ -132,35 +157,53 def pylab_activate(user_ns, gui=None, import_all=True): | |||||
132 |
|
157 | |||
133 | matplotlib.interactive(True) |
|
158 | matplotlib.interactive(True) | |
134 |
|
159 | |||
135 | # matplotlib info banner |
|
|||
136 | print """ |
|
160 | print """ | |
137 | Welcome to pylab, a matplotlib-based Python environment. |
|
161 | Welcome to pylab, a matplotlib-based Python environment. | |
138 | Backend in use: %s |
|
162 | Backend in use: %s | |
139 |
For more information, type 'help(pylab)'. |
|
163 | For more information, type 'help(pylab)'.""" % backend | |
|
164 | ||||
140 | return gui |
|
165 | return gui | |
141 |
|
166 | |||
|
167 | # We need a little factory function here to create the closure where | |||
|
168 | # safe_execfile can live. | |||
142 | def mpl_runner(safe_execfile): |
|
169 | def mpl_runner(safe_execfile): | |
143 | def mplot_exec(fname,*where,**kw): |
|
170 | """Factory to return a matplotlib-enabled runner for %run. | |
144 | """Execute a matplotlib script. |
|
171 | ||
|
172 | Parameters | |||
|
173 | ---------- | |||
|
174 | safe_execfile : function | |||
|
175 | This must be a function with the same interface as the | |||
|
176 | :meth:`safe_execfile` method of IPython. | |||
|
177 | ||||
|
178 | Returns | |||
|
179 | ------- | |||
|
180 | A function suitable for use as the ``runner`` argument of the %run magic | |||
|
181 | function. | |||
|
182 | """ | |||
|
183 | ||||
|
184 | def mpl_execfile(fname,*where,**kw): | |||
|
185 | """matplotlib-aware wrapper around safe_execfile. | |||
|
186 | ||||
|
187 | Its interface is identical to that of the :func:`execfile` builtin. | |||
145 |
|
188 | |||
146 |
This is a call to execfile(), but wrapped in safeties to |
|
189 | This is ultimately a call to execfile(), but wrapped in safeties to | |
147 |
handle interactive render |
|
190 | properly handle interactive rendering.""" | |
148 |
|
191 | |||
149 | import matplotlib |
|
192 | import matplotlib | |
150 | import matplotlib.pylab as pylab |
|
193 | import matplotlib.pylab as pylab | |
151 |
|
194 | |||
152 | #print '*** Matplotlib runner ***' # dbg |
|
195 | #print '*** Matplotlib runner ***' # dbg | |
153 | # turn off rendering until end of script |
|
196 | # turn off rendering until end of script | |
154 |
is |
|
197 | is_interactive = matplotlib.rcParams['interactive'] | |
155 | matplotlib.interactive(False) |
|
198 | matplotlib.interactive(False) | |
156 | safe_execfile(fname,*where,**kw) |
|
199 | safe_execfile(fname,*where,**kw) | |
157 |
matplotlib.interactive(is |
|
200 | matplotlib.interactive(is_interactive) | |
158 | # make rendering call now, if the user tried to do it |
|
201 | # make rendering call now, if the user tried to do it | |
159 | if pylab.draw_if_interactive.called: |
|
202 | if pylab.draw_if_interactive.called: | |
160 | pylab.draw() |
|
203 | pylab.draw() | |
161 | pylab.draw_if_interactive.called = False |
|
204 | pylab.draw_if_interactive.called = False | |
162 |
|
205 | |||
163 |
return mpl |
|
206 | return mpl_execfile | |
164 |
|
207 | |||
165 |
|
208 | |||
166 | #*************************************************************************** |
|
209 | #*************************************************************************** | |
@@ -3562,7 +3605,7 Defaulting color scheme to 'NoColor'""" | |||||
3562 | using the (pylab/wthread/etc.) command line flags. GUI toolkits |
|
3605 | using the (pylab/wthread/etc.) command line flags. GUI toolkits | |
3563 | can now be enabled, disabled and swtiched at runtime and keyboard |
|
3606 | can now be enabled, disabled and swtiched at runtime and keyboard | |
3564 | interrupts should work without any problems. The following toolkits |
|
3607 | interrupts should work without any problems. The following toolkits | |
3565 |
are support |
|
3608 | are supported: wxPython, PyQt4, PyGTK, and Tk:: | |
3566 |
|
3609 | |||
3567 | %gui wx # enable wxPython event loop integration |
|
3610 | %gui wx # enable wxPython event loop integration | |
3568 | %gui qt4|qt # enable PyQt4 event loop integration |
|
3611 | %gui qt4|qt # enable PyQt4 event loop integration | |
@@ -3678,8 +3721,42 Defaulting color scheme to 'NoColor'""" | |||||
3678 |
|
3721 | |||
3679 | _pylab_magic_run.__doc__ = magic_run.__doc__ |
|
3722 | _pylab_magic_run.__doc__ = magic_run.__doc__ | |
3680 |
|
3723 | |||
|
3724 | @testdec.skip_doctest | |||
3681 | def magic_pylab(self, s): |
|
3725 | def magic_pylab(self, s): | |
3682 | """Load pylab, optionally with gui of choice""" |
|
3726 | """Load numpy and matplotlib to work interactively. | |
|
3727 | ||||
|
3728 | %pylab [GUINAME] | |||
|
3729 | ||||
|
3730 | This function lets you activate pylab (matplotlib, numpy and | |||
|
3731 | interactive support) at any point during an IPython session. | |||
|
3732 | ||||
|
3733 | It will import at the top level numpy as np, pyplot as plt, matplotlib, | |||
|
3734 | pylab and mlab, as well as all names from numpy and pylab. | |||
|
3735 | ||||
|
3736 | Parameters | |||
|
3737 | ---------- | |||
|
3738 | guiname : optional | |||
|
3739 | One of the valid arguments to the %gui magic ('qt', 'wx', 'gtk' or | |||
|
3740 | 'tk'). If given, the corresponding Matplotlib backend is used, | |||
|
3741 | otherwise matplotlib's default (which you can override in your | |||
|
3742 | matplotlib config file) is used. | |||
|
3743 | ||||
|
3744 | Examples | |||
|
3745 | -------- | |||
|
3746 | In this case, where the MPL default is TkAgg: | |||
|
3747 | In [2]: %pylab | |||
|
3748 | ||||
|
3749 | Welcome to pylab, a matplotlib-based Python environment. | |||
|
3750 | Backend in use: TkAgg | |||
|
3751 | For more information, type 'help(pylab)'. | |||
|
3752 | ||||
|
3753 | But you can explicitly request a different backend: | |||
|
3754 | In [3]: %pylab qt | |||
|
3755 | ||||
|
3756 | Welcome to pylab, a matplotlib-based Python environment. | |||
|
3757 | Backend in use: Qt4Agg | |||
|
3758 | For more information, type 'help(pylab)'. | |||
|
3759 | """ | |||
3683 |
|
3760 | |||
3684 | gui = pylab_activate(self.shell.user_ns, s) |
|
3761 | gui = pylab_activate(self.shell.user_ns, s) | |
3685 | self.shell.magic_gui('-a %s' % gui) |
|
3762 | self.shell.magic_gui('-a %s' % gui) |
General Comments 0
You need to be logged in to leave comments.
Login now