private def decimalTicks()

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
  }