I’m trying to draw part of a histogram using matplotlib.
Instead of drawing the whole histogram which has a lot of outliers and large values I want to focus on just a small part. The original histogram looks like this:
hist(data, bins=arange(data.min(), data.max(), 1000), normed=1, cumulative=False)
plt.ylabel("PDF")

And after focusing it looks like this:
hist(data, bins=arange(0, 121, 1), normed=1, cumulative=False)
plt.ylabel("PDF")

Notice that the last bin is stretched and worst of all the Y ticks are scaled so that the sum is exactly 1 (so points out of the current range are not taken into account at all)
I know that I can achieve what I want by drawing the histogram over the whole possible range and then restricting the axis to the part I’m interested in, but it wastes a lot of time calculating bins that I won’t use/see anyway.
hist(btsd-40, bins=arange(btsd.min(), btsd.max(), 1), normed=1, cumulative=False)
axis([0,120,0,0.0025])

Is there a fast and easy way to draw just the focused region but still get the Y scale correct?
In order to plot a subset of the histogram, I don’t think you can get around to calculating the whole histogram.
Have you tried computing the histogram with
numpy.histogramand then plotting a region usingpylab.plotor something? I.e.Original histogram:

Histogram calculated manually:

Histogram calculated manually, cropped:

(N.B.: values are smaller because bins are narrower)