in atlas-chart/src/main/scala/com/netflix/atlas/chart/graphics/Ticks.scala [376:427]
private def decimalTicks(
v1: Double,
v2: Double,
n: Int,
t: (Double, Double, Int),
scale: Scale
): List[ValueTick] = {
if (Scale.LOGARITHMIC != scale) {
return normalTicks(v1, v2, t)
}
val logDistanceLimit = 2
var finalTicks: List[ValueTick] = null
if (v1 >= 0) {
// positive range
val logDistance = logDiff(v1, v2)
if (logDistance <= logDistanceLimit) {
return normalTicks(v1, v2, t)
}
finalTicks = logScaleTicks(v1, v2, getLogMajorStepSize(logDistance, n))
} else if (v2 <= 0) {
// negative range: convert range to pos, generate ticks and convert ticks to negs and reverse
val logDistance = logDiff(-v2, -v1)
if (logDistance <= logDistanceLimit) {
return normalTicks(v1, v2, t)
}
finalTicks = toNegTicks(logScaleTicks(-v2, -v1, getLogMajorStepSize(logDistance, n)))
} else {
// negative-positive range: split range to pos and neg, get ticks separately and combine
val posLogDistance = logDiff(0, v2)
val negLogDistance = logDiff(0, -v1)
val logDistance = posLogDistance + negLogDistance
if (posLogDistance <= logDistanceLimit && negLogDistance <= logDistanceLimit) {
return normalTicks(v1, v2, t)
}
val logMajorStepSize = getLogMajorStepSize(logDistance, n)
val negTicks = toNegTicks(logScaleTicks(0, -v1, logMajorStepSize))
val posTicks = logScaleTicks(0, v2, logMajorStepSize)
finalTicks = negTicks.dropRight(1) ++ posTicks // remove the dup 0 tick before combine
}
// trim unnecessary ticks
if (finalTicks.head.v < v1) {
finalTicks = finalTicks.drop(1)
}
if (finalTicks.last.v > v2) {
finalTicks = finalTicks.dropRight(1)
}
finalTicks
}