On Tue, 2007-04-10 at 19:03 +0300, Jouni K. Seppänen wrote:
> David Fokkema <[EMAIL PROTECTED]> writes:
>
> > I can't think of an application where you have bins of different
> > widths and you want to center the values...
>
> Actually, now that I think about it, there is not enough information
> in the bin centers to know the widths of the bins if they may vary.
> For example, if your bin edges are (2, 4, 8, 16, 32) or (1, 5, 7, 17,
> 31), you get the same bin centers (3, 6, 12, 24). Perhaps it's best to
> disallow variable-width bins when align='center'.
Of course! Nice example, ;-) I've changed the documentation strings.
What do you think of this patch? Shall I send it upstream as a bug
report with attached patch?
David
--- matplotlib/axes.py.orig 2007-04-12 09:52:47.000000000 +0200
+++ matplotlib/axes.py 2007-04-12 14:26:08.000000000 +0200
@@ -4137,19 +4137,21 @@
n/(len(x)*dbin)
align = 'edge' | 'center'. Interprets bins either as edge
- or center values
+ or center values. If 'center', the bins are interpreted as equally
+ sized.
orientation = 'horizontal' | 'vertical'. If horizontal, barh
will be used and the "bottom" kwarg will be the left edges.
width: the width of the bars. If None, automatically compute
- the width.
+ the width. If align = 'center', the bins are interpreted as
+ equally sized.
kwargs are used to update the properties of the
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-12 09:52:47.000000000 +0200
+++ matplotlib/mlab.py 2007-04-12 14:25:30.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
@@ -605,7 +605,12 @@
If normed is False, return the counts in the first element of the
return tuple. If normed is True, return the probability density
- n/(len(y)*dbin)
+ n/(len(y)*dbin). If normed is True, the bins are interpreted as
+ equally sized.
+
+ align = 'edge' | 'center'. Interprets bins either as edge
+ or center values. If 'center', the bins are interpreted as equally
+ sized.
If y has rank>1, it will be raveled
Credits: the Numeric 22 documentation
@@ -626,11 +631,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
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Matplotlib-users mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/matplotlib-users