Given a list of other plots return axes that are shared
        with another plot by matching the dimensions specs stored
        as tags on the dimensions.

def _merge_ranges(self, plots, xspecs, yspecs):
        """
        Given a list of other plots return axes that are shared
        with another plot by matching the dimensions specs stored
        as tags on the dimensions.
        """
        plot_ranges = {}
        for plot in plots:
            if plot is None:
                continue
            if hasattr(plot, 'x_range') and plot.x_range.tags and xspecs is not None:
                if match_dim_specs(plot.x_range.tags[0], xspecs):
                    plot_ranges['x_range'] = plot.x_range
                if match_dim_specs(plot.x_range.tags[0], yspecs):
                    plot_ranges['y_range'] = plot.x_range
            if hasattr(plot, 'y_range') and plot.y_range.tags and yspecs is not None:
                if match_dim_specs(plot.y_range.tags[0], yspecs):
                    plot_ranges['y_range'] = plot.y_range
                if match_dim_specs(plot.y_range.tags[0], xspecs):
                    plot_ranges['x_range'] = plot.y_range
        return plot_ranges