'Returns the range occupied by the data (along a specific axis) in this item.
This method is called by ViewBox when auto-scaling.
**Arguments:**
ax              (0 or 1) the axis for which to return this item\'s data range
frac            (float 0.0-1.0) Specifies what fraction of the total data
range to return. By default, the entire range is returned.
This allows the ViewBox to ignore large spikes in the data
when auto-scaling.
orthoRange      ([min,max] or None) Specifies that only the data within the
given range (orthogonal to *ax*) should me measured when
returning the data range. (For example, a ViewBox might ask
what is the y-range of all data with x-values between min
and max)'

def dataBounds(self, ax, frac=1.0, orthoRange=None):

    range = [None, None]
    if self.curve.isVisible():
        range = self.curve.dataBounds(ax, frac, orthoRange)
    elif self.scatter.isVisible():
        r2 = self.scatter.dataBounds(ax, frac, orthoRange)
        range = [(r2[0] if (range[0] is None) else (range[0] if (r2[0] is None) else min(r2[0], range[0]))), (r2[1] if (range[1] is None) else (range[1] if (r2[1] is None) else min(r2[1], range[1])))]
    return range
