Revision: 8920
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8920&view=rev
Author:   efiring
Date:     2011-01-16 01:00:37 +0000 (Sun, 16 Jan 2011)

Log Message:
-----------
Change pcolor and contourf default antialiasing to False; closes 3151847.

To avoid misplaced boundaries and artifacts with alpha < 1, we do not
stroke the pcolor and contourf patch boundaries by default; but without
that stroking, antialiasing produces boundary artifacts that tend to
be visually disturbing.  Therefore we sacrifice antialiasing for these
patches.

Modified Paths:
--------------
    branches/v1_0_maint/lib/matplotlib/axes.py
    branches/v1_0_maint/lib/matplotlib/contour.py

Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py  2011-01-15 19:49:09 UTC (rev 
8919)
+++ branches/v1_0_maint/lib/matplotlib/axes.py  2011-01-16 01:00:37 UTC (rev 
8920)
@@ -6921,14 +6921,14 @@
 
         %(PolyCollection)s
 
-        Note: the default *antialiaseds* is taken from
+        Note: the default *antialiaseds* is False if the default
+        *edgecolors*="none" is used.  This eliminates artificial lines
+        at patch boundaries, and works regardless of the value of
+        alpha.  If *edgecolors* is not "none", then the default
+        *antialiaseds* is taken from
         rcParams['patch.antialiased'], which defaults to *True*.
-        In some cases, particularly if *alpha* is 1,
-        you may be able to reduce rendering artifacts (light or
-        dark patch boundaries) by setting it to *False*.  An
-        alternative it to set *edgecolors* to 'face'.  Unfortunately,
-        there seems to be no single combination of parameters that
-        eliminates artifacts under all conditions.
+        Stroking the edges may be preferred if *alpha* is 1, but
+        will cause artifacts otherwise.
 
         """
 
@@ -6977,22 +6977,29 @@
 
         C = compress(ravelmask, ma.filled(C[0:Ny-1,0:Nx-1]).ravel())
 
+        linewidths = (0.25,)
+        if 'linewidth' in kwargs:
+            kwargs['linewidths'] = kwargs.pop('linewidth')
+        kwargs.setdefault('linewidths', linewidths)
+
         if shading == 'faceted':
             edgecolors = 'k',
         else:
             edgecolors = 'none'
-        linewidths = (0.25,)
-        # Not sure if we want to have the following, or just trap
-        # invalid kwargs and raise an exception.
         if 'edgecolor' in kwargs:
             kwargs['edgecolors'] = kwargs.pop('edgecolor')
-        if 'linewidth' in kwargs:
-            kwargs['linewidths'] = kwargs.pop('linewidth')
+        ec = kwargs.setdefault('edgecolors', edgecolors)
+
+        # aa setting will default via collections to patch.antialiased
+        # unless the boundary is not stroked, in which case the
+        # default will be False; with unstroked boundaries, aa
+        # makes artifacts that are often disturbing.
         if 'antialiased' in kwargs:
             kwargs['antialiaseds'] = kwargs.pop('antialiased')
-        kwargs.setdefault('edgecolors', edgecolors)
-        kwargs.setdefault('linewidths', linewidths)
+        if 'antialiaseds' not in kwargs and ec.lower() == "none":
+                kwargs['antialiaseds'] = False
 
+
         collection = mcoll.PolyCollection(verts, **kwargs)
 
         collection.set_alpha(alpha)

Modified: branches/v1_0_maint/lib/matplotlib/contour.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/contour.py       2011-01-15 19:49:09 UTC 
(rev 8919)
+++ branches/v1_0_maint/lib/matplotlib/contour.py       2011-01-16 01:00:37 UTC 
(rev 8920)
@@ -662,7 +662,14 @@
         self.colors = kwargs.get('colors', None)
         norm = kwargs.get('norm', None)
         self.extend = kwargs.get('extend', 'neither')
-        self.antialiased = kwargs.get('antialiased', True)
+        self.antialiased = kwargs.get('antialiased', None)
+        if self.antialiased is None and self.filled:
+            self.antialiased = False # eliminate artifacts; we are not
+                                     # stroking the boundaries.
+            # The default for line contours will be taken from
+            # the LineCollection default, which uses the
+            # rcParams['lines.antialiased']
+
         self.nchunk = kwargs.get('nchunk', 0)
         self.locator = kwargs.get('locator', None)
         if (isinstance(norm, colors.LogNorm)
@@ -734,11 +741,15 @@
             tlinewidths = self._process_linewidths()
             self.tlinewidths = tlinewidths
             tlinestyles = self._process_linestyles()
+            aa = self.antialiased
+            if aa is not None:
+                aa = (self.antialiased,)
             for level, width, lstyle, segs in \
                     zip(self.levels, tlinewidths, tlinestyles, self.allsegs):
                 # Default zorder taken from LineCollection
                 zorder = kwargs.get('zorder', 2)
                 col = collections.LineCollection(segs,
+                                     antialiaseds = aa,
                                      linewidths = width,
                                      linestyle = lstyle,
                                      alpha=self.alpha,
@@ -1358,6 +1369,10 @@
             Override axis units by specifying an instance of a
             :class:`matplotlib.units.ConversionInterface`.
 
+          *antialiased*: [ True | False ]
+            enable antialiasing, overriding the defaults.  For
+            filled contours, the default is True.  For line contours,
+            it is taken from rcParams['lines.antialiased'].
 
         contour-only keyword arguments:
 
@@ -1385,9 +1400,6 @@
 
         contourf-only keyword arguments:
 
-          *antialiased*: [ True | False ]
-            enable antialiasing
-
           *nchunk*: [ 0 | integer ]
             If 0, no subdivision of the domain. Specify a positive integer to
             divide the domain into subdomains of roughly *nchunk* by *nchunk*


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand 
malware threats, the impact they can have on your business, and how you 
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to