Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Rightclick on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
From: Tony Yu <tsyu80@gm...>  20111130 18:45:16

On Wed, Nov 30, 2011 at 11:42 AM, Jeffrey Blackburne < jblackburne@...> wrote: > Hi Steven, > > Try this: > > import numpy as np > import numpy.random > import matplotlib as mpl > import matplotlib.pyplot as plt > > x = np.random.randn(1000) > h, binedg = np.histogram(x, 10) > > wid = binedg[1:]  binedg[:1] > plt.bar(binedg[:1], h/float(x.size), width=wid) > > > On Nov 30, 2011, at 10:25 AM, Steven Boada wrote: > > > Hi Users, > > > > I'm looking to make a histogram that is normalized by the total number > > of items shown in the histogram. For example: > > > > Let's say that I have an array 1000 items long. If I make a > > histogram in > > the normal way hist(x,10) then I get a histogram showing the total > > number of items in each bin. What I want to do is take that total > > number > > in each bin and divide them by 1000 and then make the plot. > > > > So if one of my bins has 350 objects in it, then it would be > > changed to > > 0.35. > > > > Another way to say it would be that I want the height of the histogram > > to represent the fraction of the total. I am pretty sure that this is > > different than using the "normed=True" flag, but I couldn't find > > anyone > > talking about this when I searched. > > > > Thanks > > > > Steven > > One option: You can plot the normal `hist` and then change the tick labels appropriately. Here's some code for accomplishing that: #~~~ import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import FuncFormatter, MultipleLocator N = 350 ytick_step = 0.05 data = np.random.normal(size=N) def norm_num(x, pos): return '%g' % (x / float(N)) locator = MultipleLocator(N * ytick_step) formatter = FuncFormatter(norm_num) f, ax = plt.subplots() ax.yaxis.set_major_formatter(formatter) ax.yaxis.set_major_locator(locator) ax.hist(data) plt.show() #~~~ Note that the formatter object is all you need to change to the desired scale. But, that result will usually look ugly, because you'll get tick labels with long, ugly floating point numbers. The locator object fixes that issue. Best, Tony 