I fixed the bug, I think. At least it's working on my system and I think
it is not invasive. Comments please? I'll send it upstream otherwise...
--- matplotlib/axes.py.orig 2007-04-10 10:58:30.000000000 +0200
+++ matplotlib/axes.py 2007-04-10 11:14:56.000000000 +0200
@@ -4149,7 +4149,7 @@
hist bars
"""
if not self._hold: self.cla()
- n, bins = matplotlib.mlab.hist(x, bins, normed)
+ n, bins = matplotlib.mlab.hist(x, bins, normed, align)
if width is None: width = 0.9*(bins[1]-bins[0])
if orientation == 'horizontal':
patches = self.barh(bins, n, height=width, left=bottom,
align=align)
--- matplotlib/mlab.py.orig 2007-04-10 11:16:23.000000000 +0200
+++ matplotlib/mlab.py 2007-04-10 11:24:48.000000000 +0200
@@ -597,7 +597,7 @@
#S = -1.0*asum(p*log(p))
return S
-def hist(y, bins=10, normed=0):
+def hist(y, bins=10, normed=0, align='edge'):
"""
Return the histogram of y with bins equally sized bins. If bins
is an array, use the bins. Return value is
@@ -626,11 +626,16 @@
dy = (ymax-ymin)/bins
bins = ymin + dy*arange(bins)
+ if align == 'center':
+ hw = .5*(bins[1]-bins[0])
+ nbins = [x-hw for x in bins]
+ else:
+ nbins = bins
- n = searchsorted(sort(y), bins)
+ n = searchsorted(sort(y), nbins)
n = diff(concatenate([n, [len(y)]]))
if normed:
- db = bins[1]-bins[0]
+ db = nbins[1]-nbins[0]
return 1/(len(y)*db)*n, bins
else:
return n, bins
Thanks,
David
···
On Sun, 2007-04-08 at 19:25 +0200, David Fokkema wrote:
On Fri, 2007-04-06 at 18:32 +0300, Jouni K. Seppänen wrote:
> David Fokkema <dfokkema@...1511...> writes:
>
> > If I choose center, the result is that my histogram is calculated
> > for edge values but the bars are placed at center values which is
> > completely misleading and wrong! I'd say this is a bug, but I may be
> > overlooking something here...
>
> Looks like a bug to me. Could you file it at
> http://sf.net/tracker/?group_id=80706&atid=560720
> so it isn't forgotten?
Well... It couldn't be too hard to fix, I guess... I know python, I
tracked down the source, I could try and fix it, right? I think I'll
have the time next Tuesday, so hopefully I'll file a bug report with an
attached patch, 