Creating a Histogram with Logarithmic Bins
QUESTION: Can you show me how to create and plot a histogram with logarithmic bins? For example, I have two one-dimensional vectors and I'm interested in their ratio.
v1 = Randomu(-3L, 1000) * 100 v2 = Randomu(-5L, 1000) * 100 ratio = v1 / v2Theoretically, ratio should be equally distributed in the range 0 to 1 and in the range 1 to infinity. I would like to check this with a histogram plot, using logarithmic bin sizes. Is this possible in IDL?
ANSWER: Yes, it is possible. The secret is to use Value_Locate to partition the data into your logarithmic bins. The code will look like this.
bins = [0, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0] binnedRatio = Value_Locate(bins, ratio)
Note that the first positional parameter to Value_Locate must be sorted in monotonically increasing (or decreasing) order, but the second positional parameter does not have to be.
You can use cgHistoPlot to draw the histogram of the data. However, in this case, leave the X axis label off, since you will have to add your own labels later. Your code might look like this:
cgHistoplot, binnedRatio, XTickformat='(A1)', /Fill labels = ['0', '0.01', '0.1', '1', '10', '100', '1000'] FOR j=0,6 DO cgText, j, -30, labels[j], Alignment=0.5, Color='navy'
You see the results in the figure below. In this case, it looks like your theory is confirmed.
![]() |
A histogram plot with logarithmic bins. |
Version of IDL used to prepare this article: IDL 7.0.3.
Copyright © 2009 David W. Fanning
Last Updated 8 July 2009