123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- """Configurable for configuring the IPython inline backend
- This module does not import anything from matplotlib.
- """
- #-----------------------------------------------------------------------------
- # Copyright (C) 2011 The IPython Development Team
- #
- # Distributed under the terms of the BSD License. The full license is in
- # the file COPYING, distributed as part of this software.
- #-----------------------------------------------------------------------------
- #-----------------------------------------------------------------------------
- # Imports
- #-----------------------------------------------------------------------------
- from traitlets.config.configurable import SingletonConfigurable
- from traitlets import (
- Dict, Instance, Set, Bool, TraitError, Unicode
- )
- #-----------------------------------------------------------------------------
- # Configurable for inline backend options
- #-----------------------------------------------------------------------------
- def pil_available():
- """Test if PIL/Pillow is available"""
- out = False
- try:
- from PIL import Image
- out = True
- except:
- pass
- return out
- # inherit from InlineBackendConfig for deprecation purposes
- class InlineBackendConfig(SingletonConfigurable):
- pass
- class InlineBackend(InlineBackendConfig):
- """An object to store configuration of the inline backend."""
- # The typical default figure size is too large for inline use,
- # so we shrink the figure size to 6x4, and tweak fonts to
- # make that fit.
- rc = Dict({'figure.figsize': (6.0,4.0),
- # play nicely with white background in the Qt and notebook frontend
- 'figure.facecolor': (1,1,1,0),
- 'figure.edgecolor': (1,1,1,0),
- # 12pt labels get cutoff on 6x4 logplots, so use 10pt.
- 'font.size': 10,
- # 72 dpi matches SVG/qtconsole
- # this only affects PNG export, as SVG has no dpi setting
- 'figure.dpi': 72,
- # 10pt still needs a little more room on the xlabel:
- 'figure.subplot.bottom' : .125
- },
- help="""Subset of matplotlib rcParams that should be different for the
- inline backend."""
- ).tag(config=True)
- figure_formats = Set({'png'},
- help="""A set of figure formats to enable: 'png',
- 'retina', 'jpeg', 'svg', 'pdf'.""").tag(config=True)
- def _update_figure_formatters(self):
- if self.shell is not None:
- from IPython.core.pylabtools import select_figure_formats
- select_figure_formats(self.shell, self.figure_formats, **self.print_figure_kwargs)
- def _figure_formats_changed(self, name, old, new):
- if 'jpg' in new or 'jpeg' in new:
- if not pil_available():
- raise TraitError("Requires PIL/Pillow for JPG figures")
- self._update_figure_formatters()
- figure_format = Unicode(help="""The figure format to enable (deprecated
- use `figure_formats` instead)""").tag(config=True)
- def _figure_format_changed(self, name, old, new):
- if new:
- self.figure_formats = {new}
- print_figure_kwargs = Dict({'bbox_inches' : 'tight'},
- help="""Extra kwargs to be passed to fig.canvas.print_figure.
- Logical examples include: bbox_inches, quality (for jpeg figures), etc.
- """
- ).tag(config=True)
- _print_figure_kwargs_changed = _update_figure_formatters
- close_figures = Bool(True,
- help="""Close all figures at the end of each cell.
- When True, ensures that each cell starts with no active figures, but it
- also means that one must keep track of references in order to edit or
- redraw figures in subsequent cells. This mode is ideal for the notebook,
- where residual plots from other cells might be surprising.
- When False, one must call figure() to create new figures. This means
- that gcf() and getfigs() can reference figures created in other cells,
- and the active figure can continue to be edited with pylab/pyplot
- methods that reference the current active figure. This mode facilitates
- iterative editing of figures, and behaves most consistently with
- other matplotlib backends, but figure barriers between cells must
- be explicit.
- """).tag(config=True)
-
- shell = Instance('IPython.core.interactiveshell.InteractiveShellABC',
- allow_none=True)
|