+static double
+_step_for_range (double range)
+{
+ double step, scale_factor;
+
+ /* We want roughly 5 major ticks for the chart. */
+ step = range / 5;
+
+ /* Normalize the step so we can easily snap it to a desirable
+ * value. */
+ scale_factor = pow (10.0, floor (log10 (step)));
+ step /= scale_factor;
+
+ /* We want increments of 1, 2.5, 5, or 10 (times some power of
+ * 10). The threshold values between these are computed
+ * logarithmically. */
+ if (step < 3.535533905932738) {
+ if (step < 1.58113883008419)
+ step = 1.0;
+ else
+ step = 2.5;
+ } else {
+ if (step < 7.071067811865475)
+ step = 5.0;
+ else
+ step = 10.0;
+ }
+
+ /* Un-normalize and we now have the data value that we want to
+ * step at. */
+ return step * scale_factor;
+}
+