Thanks to visit codestin.com
Credit goes to github.com

Skip to content
mdehoon edited this page Jul 11, 2015 · 7 revisions

.. contents:: Table of Contents

.. author:: Michiel de Hoon

.. date:: July 11, 2015

Status

Discussion

Branches and Pull requests

None so far.

Abstract

To set the transparency (alpha component) of a graphics context, either gc.set_alpha(alpha) or gc.set_foreground(rgba, isRGBA=True) can be used. Currently, gc.set_alpha(alpha) forces the alpha value, meaning that gc.set_foreground(rgba, isRGBA=True) will ignore the alpha value of rgba if alpha was previously set through gc.set_alpha. Forcing alpha adds complexity to GraphicsContextBase as well as to the Cairo and MacOSX backends, in which this behavior is partially implemented.

Detailed description

  • Current API definition of gc.set_alpha and gc.set_foreground
  • Actual usage of forced alpha in matplotlib Calls to gc.set_alpha are made in:
    • In lib/matplotlib/image.py, in the draw methods of _AxesImageBase, PcolorImage, FigureImage, and BboxImage;
    • In lib/matplotlib/lines.py, in the draw method of Line2D (five calls total);
    • In lib/matplotlib/patches.py, in the draw methods of Patch and FancyArrowPatch;
    • In lib/matplotlib/patheffects.py, in the draw_path methods of SimplePatchShadow and SimpleLineShadow;
    • In lib/matplotlib/text.py, in the draw method of Text;
    • In lib/mpl_toolkits/axisartist/axis_artist.py, in the draw method of BezierPath and Ticks. Note that these do not necessarily rely on the fact that alpha is forced; this remains to be verified.
  • Comparison to other APIs (Cairo, Cocoa, Postscript, Windows?)
  • Alternatives to forced alpha.

Implementation

  • Review the current usage of gc.set_alpha and make the required changes, if any;
  • Remove the _forced_alpha sections from GraphicsContextBase, RendererCairo, GraphicsContextCairo, RendererMac, GraphicsContextMac, and _macosx.GraphicsContext.

Backward compatibility

The proposal changes the graphics context, which is part of the internal API of matplotlib and is not expected to affect end users.

Alternatives

Clone this wiki locally