docs: def set_viewlimits(self, axes=None):
          """ update xy limits of a plot"""
          if axes is None:
              axes = self.axes
  
          xmin, xmax, ymin, ymax = self.data_range
          if len(self.conf.zoom_lims) >1:
              zlims = self.conf.zoom_lims[-1]
              if axes in zlims:
                  xmin, xmax, ymin, ymax = zlims[axes]
  
          xmin = max(self.data_range[0], xmin)
          xmax = min(self.data_range[1], xmax)
          ymin = max(self.data_range[2], ymin)
          ymax = min(self.data_range[3], ymax)
          if (xmax < self.data_range[0] or
              xmin > self.data_range[1] or
              ymax < self.data_range[2] or
              ymin > self.data_range[3] ):
              self.conf.zoom_lims.pop()
              return
  
          if abs(xmax-xmin) < 2:
              xmin = int(0.5*(xmax+xmin) - 1)
              xmax = xmin + 2
  
          if abs(ymax-ymin) < 2:
              ymin = int(0.5*(ymax+xmin) - 1)
              ymax = ymin + 2
  
          self.axes.set_xlim((xmin, xmax),emit=True)
          self.axes.set_ylim((ymin, ymax),emit=True)
          self.axes.update_datalim(((xmin, ymin), (xmax, ymax)))
  
          self.conf.datalimits = [xmin, xmax, ymin, ymax]
          self.redraw()