Resize Map to Zoom to a particular area


I have some code that creates a map and initialises the figure/map to as shown below with the X and Y ranges set to cover the min/max values associated with my data set of polygons overlaid on the map.

tileSrc = get_provider(Vendors.CARTODBPOSITRON_RETINA)

 dist = figure(x_range=Range1d(min(min(['E'])), max(max(['E']))), 
                     y_range=Range1d(min(min(['N'])), max(max(['N']))),
                     height=1500, width=1800, height_policy="max", width_policy="max", 

If a user selects a particular region I would like the map to zoom to that area automagically. (It is a simple scroll/zoom to do it manually). In the code below I tried overriding the x_range and y_range values with the range that covers the selected area which does something (it reduces the coverage of the tiles to the new x/y ranges but it doesn’t zoom or centre to that range.

I could recreate the figure and poke it back into the doc but then I’d have to recreate a bunch of other glyphs (I suspect) and attach them to the new figure.

Any ideas how one might resize and recentre the map given a new range?

def newZone(attr, old, new):
      # reset zone layer
       global currentZone, mapper
       currentZone = int(new)

       zonebase = div.sa1df.loc[div.sa1df.distzone == currentZone,['distarea','geometry','private','fill_colour']]
       if (currentZone == 0) or (len(zonebase) == 0):
       = dict(
                print("Current Zone is: {0}".format(div.divZones.loc[div.divZones.Id == currentZone]))
                dist.title.text = "Distribution Areas for {0}".format(div.divZones.loc[div.divZones.Id == 
                saveArea.disabled = True
                zones = []
                zones = zonebase.dissolve(by='distarea', aggfunc='sum')
                zones['fill_alpha'] = 0
                zones['fill_colour'] = zones.distarea % 20
                #  Adjust 'private' count based on distAreas adjustments
                # TODO Redo adjustments
                zones['Adjusted'] = zones.private #+ zones.Adjustment
       = dict(convert_GeoPandas_to_Bokeh_format(zones).data)
                dist.x_range = Range1d(min(min(['E'])), max(max(['E'])))
                dist.y_range = Range1d(min(min(['N'])), max(max(['N'])))

                dist.title.text = 'Distribution Areas for {0}'.format(div.divZones.loc[div.divZones.Id == currentZone,'Name'].tolist()[0])