Show More
@@ -0,0 +1,85 b'' | |||||
|
1 | """Configurable for configuring the IPython inline backend | |||
|
2 | ||||
|
3 | This module does not import anything from matplotlib. | |||
|
4 | """ | |||
|
5 | #----------------------------------------------------------------------------- | |||
|
6 | # Copyright (C) 2011 The IPython Development Team | |||
|
7 | # | |||
|
8 | # Distributed under the terms of the BSD License. The full license is in | |||
|
9 | # the file COPYING, distributed as part of this software. | |||
|
10 | #----------------------------------------------------------------------------- | |||
|
11 | ||||
|
12 | #----------------------------------------------------------------------------- | |||
|
13 | # Imports | |||
|
14 | #----------------------------------------------------------------------------- | |||
|
15 | ||||
|
16 | from IPython.config.configurable import SingletonConfigurable | |||
|
17 | from IPython.utils.traitlets import Dict, Instance, CaselessStrEnum, Bool | |||
|
18 | from IPython.utils.warn import warn | |||
|
19 | ||||
|
20 | #----------------------------------------------------------------------------- | |||
|
21 | # Configurable for inline backend options | |||
|
22 | #----------------------------------------------------------------------------- | |||
|
23 | ||||
|
24 | # inherit from InlineBackendConfig for deprecation purposes | |||
|
25 | class InlineBackendConfig(SingletonConfigurable): | |||
|
26 | pass | |||
|
27 | ||||
|
28 | class InlineBackend(InlineBackendConfig): | |||
|
29 | """An object to store configuration of the inline backend.""" | |||
|
30 | ||||
|
31 | def _config_changed(self, name, old, new): | |||
|
32 | # warn on change of renamed config section | |||
|
33 | if new.InlineBackendConfig != old.InlineBackendConfig: | |||
|
34 | warn("InlineBackendConfig has been renamed to InlineBackend") | |||
|
35 | super(InlineBackend, self)._config_changed(name, old, new) | |||
|
36 | ||||
|
37 | # The typical default figure size is too large for inline use, | |||
|
38 | # so we shrink the figure size to 6x4, and tweak fonts to | |||
|
39 | # make that fit. | |||
|
40 | rc = Dict({'figure.figsize': (6.0,4.0), | |||
|
41 | # play nicely with white background in the Qt and notebook frontend | |||
|
42 | 'figure.facecolor': 'white', | |||
|
43 | 'figure.edgecolor': 'white', | |||
|
44 | # 12pt labels get cutoff on 6x4 logplots, so use 10pt. | |||
|
45 | 'font.size': 10, | |||
|
46 | # 72 dpi matches SVG/qtconsole | |||
|
47 | # this only affects PNG export, as SVG has no dpi setting | |||
|
48 | 'savefig.dpi': 72, | |||
|
49 | # 10pt still needs a little more room on the xlabel: | |||
|
50 | 'figure.subplot.bottom' : .125 | |||
|
51 | }, config=True, | |||
|
52 | help="""Subset of matplotlib rcParams that should be different for the | |||
|
53 | inline backend.""" | |||
|
54 | ) | |||
|
55 | ||||
|
56 | figure_format = CaselessStrEnum(['svg', 'png', 'retina'], default_value='png', config=True, | |||
|
57 | help="The image format for figures with the inline backend.") | |||
|
58 | ||||
|
59 | def _figure_format_changed(self, name, old, new): | |||
|
60 | from IPython.core.pylabtools import select_figure_format | |||
|
61 | if self.shell is None: | |||
|
62 | return | |||
|
63 | else: | |||
|
64 | select_figure_format(self.shell, new) | |||
|
65 | ||||
|
66 | close_figures = Bool(True, config=True, | |||
|
67 | help="""Close all figures at the end of each cell. | |||
|
68 | ||||
|
69 | When True, ensures that each cell starts with no active figures, but it | |||
|
70 | also means that one must keep track of references in order to edit or | |||
|
71 | redraw figures in subsequent cells. This mode is ideal for the notebook, | |||
|
72 | where residual plots from other cells might be surprising. | |||
|
73 | ||||
|
74 | When False, one must call figure() to create new figures. This means | |||
|
75 | that gcf() and getfigs() can reference figures created in other cells, | |||
|
76 | and the active figure can continue to be edited with pylab/pyplot | |||
|
77 | methods that reference the current active figure. This mode facilitates | |||
|
78 | iterative editing of figures, and behaves most consistently with | |||
|
79 | other matplotlib backends, but figure barriers between cells must | |||
|
80 | be explicit. | |||
|
81 | """) | |||
|
82 | ||||
|
83 | shell = Instance('IPython.core.interactiveshell.InteractiveShellABC') | |||
|
84 | ||||
|
85 |
@@ -45,6 +45,7 b' from IPython.kernel.zmq.kernelapp import (' | |||||
45 | kernel_aliases, |
|
45 | kernel_aliases, | |
46 | IPKernelApp |
|
46 | IPKernelApp | |
47 | ) |
|
47 | ) | |
|
48 | from IPython.kernel.zmq.pylab.config import InlineBackend | |||
48 | from IPython.kernel.zmq.session import Session, default_secure |
|
49 | from IPython.kernel.zmq.session import Session, default_secure | |
49 | from IPython.kernel.zmq.zmqshell import ZMQInteractiveShell |
|
50 | from IPython.kernel.zmq.zmqshell import ZMQInteractiveShell | |
50 | from IPython.kernel.connect import ConnectionFileMixin |
|
51 | from IPython.kernel.connect import ConnectionFileMixin | |
@@ -110,14 +111,7 b' aliases.update(app_aliases)' | |||||
110 | # IPythonConsole |
|
111 | # IPythonConsole | |
111 | #----------------------------------------------------------------------------- |
|
112 | #----------------------------------------------------------------------------- | |
112 |
|
113 | |||
113 | classes = [IPKernelApp, ZMQInteractiveShell, KernelManager, ProfileDir, Session] |
|
114 | classes = [IPKernelApp, ZMQInteractiveShell, KernelManager, ProfileDir, Session, InlineBackend] | |
114 |
|
||||
115 | try: |
|
|||
116 | from IPython.kernel.zmq.pylab.backend_inline import InlineBackend |
|
|||
117 | except ImportError: |
|
|||
118 | pass |
|
|||
119 | else: |
|
|||
120 | classes.append(InlineBackend) |
|
|||
121 |
|
115 | |||
122 | class IPythonConsoleApp(ConnectionFileMixin): |
|
116 | class IPythonConsoleApp(ConnectionFileMixin): | |
123 | name = 'ipython-console-mixin' |
|
117 | name = 'ipython-console-mixin' |
@@ -1,5 +1,11 b'' | |||||
1 | """Produce SVG versions of active plots for display by the rich Qt frontend. |
|
1 | """A matplotlib backend for publishing figures via display_data""" | |
2 | """ |
|
2 | #----------------------------------------------------------------------------- | |
|
3 | # Copyright (C) 2011 The IPython Development Team | |||
|
4 | # | |||
|
5 | # Distributed under the terms of the BSD License. The full license is in | |||
|
6 | # the file COPYING, distributed as part of this software. | |||
|
7 | #----------------------------------------------------------------------------- | |||
|
8 | ||||
3 | #----------------------------------------------------------------------------- |
|
9 | #----------------------------------------------------------------------------- | |
4 | # Imports |
|
10 | # Imports | |
5 | #----------------------------------------------------------------------------- |
|
11 | #----------------------------------------------------------------------------- | |
@@ -7,80 +13,14 b' from __future__ import print_function' | |||||
7 |
|
13 | |||
8 | # Third-party imports |
|
14 | # Third-party imports | |
9 | import matplotlib |
|
15 | import matplotlib | |
10 |
from matplotlib.backends.backend_agg import |
|
16 | from matplotlib.backends.backend_agg import FigureCanvasAgg | |
11 | from matplotlib._pylab_helpers import Gcf |
|
17 | from matplotlib._pylab_helpers import Gcf | |
12 |
|
18 | |||
13 |
# Local imports |
|
19 | # Local imports | |
14 | from IPython.config.configurable import SingletonConfigurable |
|
20 | from IPython.core.getipython import get_ipython | |
15 | from IPython.core.display import display |
|
21 | from IPython.core.display import display | |
16 | from IPython.core.displaypub import publish_display_data |
|
|||
17 | from IPython.core.pylabtools import print_figure, select_figure_format |
|
|||
18 | from IPython.utils.traitlets import Dict, Instance, CaselessStrEnum, Bool |
|
|||
19 | from IPython.utils.warn import warn |
|
|||
20 |
|
||||
21 | #----------------------------------------------------------------------------- |
|
|||
22 | # Configurable for inline backend options |
|
|||
23 | #----------------------------------------------------------------------------- |
|
|||
24 | # inherit from InlineBackendConfig for deprecation purposes |
|
|||
25 | class InlineBackendConfig(SingletonConfigurable): |
|
|||
26 | pass |
|
|||
27 |
|
||||
28 | class InlineBackend(InlineBackendConfig): |
|
|||
29 | """An object to store configuration of the inline backend.""" |
|
|||
30 |
|
||||
31 | def _config_changed(self, name, old, new): |
|
|||
32 | # warn on change of renamed config section |
|
|||
33 | if new.InlineBackendConfig != old.InlineBackendConfig: |
|
|||
34 | warn("InlineBackendConfig has been renamed to InlineBackend") |
|
|||
35 | super(InlineBackend, self)._config_changed(name, old, new) |
|
|||
36 |
|
||||
37 | # The typical default figure size is too large for inline use, |
|
|||
38 | # so we shrink the figure size to 6x4, and tweak fonts to |
|
|||
39 | # make that fit. |
|
|||
40 | rc = Dict({'figure.figsize': (6.0,4.0), |
|
|||
41 | # play nicely with white background in the Qt and notebook frontend |
|
|||
42 | 'figure.facecolor': 'white', |
|
|||
43 | 'figure.edgecolor': 'white', |
|
|||
44 | # 12pt labels get cutoff on 6x4 logplots, so use 10pt. |
|
|||
45 | 'font.size': 10, |
|
|||
46 | # 72 dpi matches SVG/qtconsole |
|
|||
47 | # this only affects PNG export, as SVG has no dpi setting |
|
|||
48 | 'savefig.dpi': 72, |
|
|||
49 | # 10pt still needs a little more room on the xlabel: |
|
|||
50 | 'figure.subplot.bottom' : .125 |
|
|||
51 | }, config=True, |
|
|||
52 | help="""Subset of matplotlib rcParams that should be different for the |
|
|||
53 | inline backend.""" |
|
|||
54 | ) |
|
|||
55 |
|
||||
56 | figure_format = CaselessStrEnum(['svg', 'png', 'retina'], default_value='png', config=True, |
|
|||
57 | help="The image format for figures with the inline backend.") |
|
|||
58 |
|
||||
59 | def _figure_format_changed(self, name, old, new): |
|
|||
60 | if self.shell is None: |
|
|||
61 | return |
|
|||
62 | else: |
|
|||
63 | select_figure_format(self.shell, new) |
|
|||
64 |
|
||||
65 | close_figures = Bool(True, config=True, |
|
|||
66 | help="""Close all figures at the end of each cell. |
|
|||
67 |
|
||||
68 | When True, ensures that each cell starts with no active figures, but it |
|
|||
69 | also means that one must keep track of references in order to edit or |
|
|||
70 | redraw figures in subsequent cells. This mode is ideal for the notebook, |
|
|||
71 | where residual plots from other cells might be surprising. |
|
|||
72 |
|
||||
73 | When False, one must call figure() to create new figures. This means |
|
|||
74 | that gcf() and getfigs() can reference figures created in other cells, |
|
|||
75 | and the active figure can continue to be edited with pylab/pyplot |
|
|||
76 | methods that reference the current active figure. This mode facilitates |
|
|||
77 | iterative editing of figures, and behaves most consistently with |
|
|||
78 | other matplotlib backends, but figure barriers between cells must |
|
|||
79 | be explicit. |
|
|||
80 | """) |
|
|||
81 |
|
||||
82 | shell = Instance('IPython.core.interactiveshell.InteractiveShellABC') |
|
|||
83 |
|
22 | |||
|
23 | from .config import InlineBackend | |||
84 |
|
24 | |||
85 | #----------------------------------------------------------------------------- |
|
25 | #----------------------------------------------------------------------------- | |
86 | # Functions |
|
26 | # Functions | |
@@ -107,7 +47,6 b' def show(close=None):' | |||||
107 | matplotlib.pyplot.close('all') |
|
47 | matplotlib.pyplot.close('all') | |
108 |
|
48 | |||
109 |
|
49 | |||
110 |
|
||||
111 | # This flag will be reset by draw_if_interactive when called |
|
50 | # This flag will be reset by draw_if_interactive when called | |
112 | show._draw_called = False |
|
51 | show._draw_called = False | |
113 | # list of figures to draw when flush_figures is called |
|
52 | # list of figures to draw when flush_figures is called |
General Comments 0
You need to be logged in to leave comments.
Login now