8000 MEP28 · matplotlib/matplotlib Wiki · GitHub
[go: up one dir, main page]

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 gc.set_alpha(alpha) overrides gc.set_foreground(rgba); 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
0