Revision: 8679
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8679&view=rev
Author:   efiring
Date:     2010-09-05 00:38:45 +0000 (Sun, 05 Sep 2010)

Log Message:
-----------
[3024007] Fix ancient bug in hist inherited from numpy, fixed in numpy 1.5

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

Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py  2010-09-04 21:23:03 UTC (rev 
8678)
+++ branches/v1_0_maint/lib/matplotlib/axes.py  2010-09-05 00:38:45 UTC (rev 
8679)
@@ -7451,6 +7451,12 @@
               pdf, bins, patches = ax.hist(...)
               print np.sum(pdf * np.diff(bins))
 
+            .. Note:: Until numpy release 1.5, the underlying numpy
+                      histogram function was incorrect with *normed*=*True*
+                      if bin sizes were unequal.  MPL inherited that
+                      error.  It is now corrected within MPL when using
+                      earlier numpy versions
+
           *weights*
             An array of weights, of the same shape as *x*.  Each value in
             *x* only contributes its associated weight towards the bin
@@ -7632,7 +7638,10 @@
                 xmax = max(xmax, xi.max())
             range = (xmin, xmax)
 
-        hist_kwargs = dict(range=range, normed=bool(normed))
+        #hist_kwargs = dict(range=range, normed=bool(normed))
+        # We will handle the normed kwarg within mpl until we
+        # get to the point of requiring numpy >= 1.5.
+        hist_kwargs = dict(range=range)
         if np.__version__ < "1.3": # version 1.1 and 1.2
             hist_kwargs['new'] = True
 
@@ -7641,8 +7650,21 @@
             # this will automatically overwrite bins,
             # so that each histogram uses the same bins
             m, bins = np.histogram(x[i], bins, weights=w[i], **hist_kwargs)
+            if normed:
+                db = np.diff(bins)
+                m = (m.astype(float) / db) / m.sum()
             n.append(m)
+        if normed and db.std() > 0.01 * db.mean():
+            warnings.warn("""
+            This release fixes a normalization bug in the NumPy histogram
+            function prior to version 1.5, occuring with non-uniform
+            bin widths. The returned and plotted value is now a density:
+                n / (N * bin width),
+            where n is the bin count and N the total number of points.
+            """)
 
+
+
         if cumulative:
             slc = slice(None)
             if cbook.is_numlike(cumulative) and cumulative < 0:


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

------------------------------------------------------------------------------
This SF.net Dev2Dev email is sponsored by:

Show off your parallel programming skills.
Enter the Intel(R) Threading Challenge 2010.
http://p.sf.net/sfu/intel-thread-sfd
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to