Returns or sets (if a value is provided) the value at which the
        x-axis should start. By default this is zero (unless there are negative
        values).

        :param limit: If given, the chart's x_lower_limit will be set to this.
        :raises ValueError: if you try to make the lower limit larger than the\
        upper limit.

def x_lower_limit(self, limit=None):
        """Returns or sets (if a value is provided) the value at which the
        x-axis should start. By default this is zero (unless there are negative
        values).

        :param limit: If given, the chart's x_lower_limit will be set to this.
        :raises ValueError: if you try to make the lower limit larger than the\
        upper limit."""

        if limit is None:
            if self._x_lower_limit is None:
                if self.smallest_x() < 0:
                    if self.smallest_x() == self.largest_x():
                        return int(self.smallest_x() - 1)
                    else:
                        return self.smallest_x()
                else:
                    return 0
            else:
                return self._x_lower_limit
        else:
            if not is_numeric(limit):
                raise TypeError(
                 "lower x limit must be numeric, not '%s'" % str(limit)
                )
            if limit >= self.largest_x():
                raise ValueError(
                 "lower x limit must be less than upper limit (%s), not %s" % (
                  str(self.largest_x()), str(limit)
                 )
                )
            self._x_lower_limit = limit