def bounds()

in atlas-chart/src/main/scala/com/netflix/atlas/chart/model/PlotDef.scala [68:135]


  def bounds(start: Long, end: Long): (Double, Double) = {

    val dataLines = lines
    if (dataLines.isEmpty) 0.0 -> 1.0
    else {
      val step = dataLines.head.data.data.step
      val (regular, stacked) = dataLines
        .filter(line => line.lineStyle != LineStyle.VSPAN && !Heatmap.isPercentileHeatmap(line))
        .partition(_.lineStyle != LineStyle.STACK)

      var max = -JDouble.MAX_VALUE
      var min = JDouble.MAX_VALUE
      var posSum = 0.0
      var negSum = 0.0

      dataLines
        .filter(Heatmap.isPercentileHeatmap)
        .filter(line => hasNonZeroData(start, end, step, line.data.data))
        .flatMap(line => Heatmap.percentileBucketRange(line.data.tags))
        .foreach {
          case (mn, mx) =>
            min = math.min(min, mn)
            max = math.max(max, mx)
        }

      var t = start
      while (t < end) {
        regular.foreach { line =>
          val v = line.data.data(t)
          if (JDouble.isFinite(v)) {
            max = if (v > max) v else max
            min = if (v < min) v else min
          }
        }

        stacked.foreach { line =>
          val v = line.data.data(t)
          if (JDouble.isFinite(v)) {
            if (v >= 0.0) posSum += v else negSum += v
          }
        }

        if (stacked.nonEmpty) {
          val v = stacked.head.data.data(t)
          if (JDouble.isFinite(v)) {
            max = if (v > max) v else max
            min = if (v < min) v else min
          }

          max = if (posSum > 0.0 && posSum > max) posSum else max
          min = if (negSum < 0.0 && negSum < min) negSum else min
        }

        posSum = 0.0
        negSum = 0.0
        t += step
      }

      // If an area or stack is shown it will fill to zero and the filled area should be shown
      val hasArea = dataLines.exists { line =>
        line.lineStyle == LineStyle.AREA || line.lineStyle == LineStyle.STACK
      }

      min = if (min == JDouble.MAX_VALUE) 0.0 else min
      max = if (max == -JDouble.MAX_VALUE) 1.0 else max
      finalBounds(hasArea, min, max)
    }
  }